2016-04-07 126 views
-1

在A类中扩展B类,现在我在A类中打印变量a的值。我得到的结果是a = 0。我怎样才能获得值= 2如何将B类变量传递给A类,如果A类扩展B类

A类

package testing; 

public class ClassA extends ClassB { 

    public void print(){ 
     System.out.println("a= " +a); 
    } 
    public static void main(String arg[]){ 
     ClassA ca = new ClassA(); 
     ca.print(); 

    } 
} 

B类

package testing; 

public class ClassB { 
int a; 
public void send(){ 
    a=2; 
} 
} 

回答

1

最初的a0,因为你还没有将其设置为任何东西,并通过默认情况下,当您拨打new ClassA();时,它被初始化为0.因此,您得到0作为输出。

您需要拨打send方法,将a的值设置为2

ClassA ca = new ClassA(); 
ca.send(); //Here 
ca.print(); 
0

要调用ca.print()不分配给它的任何值,所以基本上它是为int一个是0

打印功能之前,将调用send(),编译器会首先检查打印初始化值对于在ClassA中发送的函数,当它没有找到它时,它会调用SuperClass的发送函数B,它将为变量a赋值'2',当调用print()时,调用A类中的打印函数,现在A类没有变量叫做a,所以变量a的值是从它的超类中调用的,你会得到的打印2的值。

代码应该看起来像 - >

public class ClassA extends ClassB { 

    public void print(){ 
     System.out.println("a= " +a); 
    } 
    public static void main(String arg[]){ 
     ClassA ca = new ClassA(); 
     ca.send(); 
     ca.print(); 

    } 
} 

public class ClassB { 
int a; 


public void send(){ 
    a=2; 
} 
} 
+0

的代码不应该像她那样的。 OP的格式非常糟糕。 – bcsb1001

+0

但是如果调用send()然后“send()”方法里面有更多的函数。如果我喜欢上面,它也会调用/执行其他方法/逻辑。然后该怎么办 – DoubtClear

+0

任何人回答我的疑问? – DoubtClear

0

你INT变量,默认情况下,与0

一些选项初始化:

A)改变你的主要的方法来调用send方法

ClassA ca = new ClassA(); 
    ca.send(); //set the value to 2 
    ca.print(); 

B)如果不想改变你的主要方法(出于任何原因) ,您可以将变量初始化移动到类construtor:

ClassA() { 
     a = 2 
    } 

现在,当你实例化你的类(新ClassA的()),“A”会是等于2

1

另一种更简单的方法理解类之间的变量解析是使用get-set方法。

A类代码:

public class ClassA extends ClassB {  
public static void main (String [] args) 
{   
    ClassB ClassBValue = new ClassB(); 
    System.out.println(ClassBValue.getA()); 
} 

}

B类代码:

public class ClassB { 
    int A = 2;  
    public int getA() 
    { 
     return A; 
    } 
    public void setAValue(int A) 
    { 
     this.A = A; 
    } 
} 

希望这有助于

相关问题