Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果类A扩展了类B,如何将类B变量传递给类A_Java - Fatal编程技术网

Java 如果类A扩展了类B,如何将类B变量传递给类A

Java 如果类A扩展了类B,如何将类B变量传递给类A,java,Java,在类A中扩展类B,现在我正在打印类A中变量A的值。我得到的结果是A=0。我如何得到a=2的值 甲级 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()

在类A中扩展类B,现在我正在打印类A中变量A的值。我得到的结果是A=0。我如何得到a=2的值

甲级

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;
}
}

最初
a
的值是
0
,因为您没有将其设置为任何值,默认情况下,当您调用
new ClassA()时它被初始化为0。因此,您得到
0
作为输出

您需要调用
send
方法,将
a
的值设置为
2

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

您正在调用
ca.print()
,但没有为其指定任何值,因此基本上它正在打印
int
a的初始化值,该值为0

在print函数之前调用
send()
,编译器将首先在
ClassA
中检查函数send,当在那里找不到它时,它将调用超类的send函数,即B,这将为变量a赋值“2”,当调用
print()
时,将调用类a中存在的print函数,现在类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;
}
}

默认情况下,int变量初始化为0

一些选择:

A) 更改main方法以调用send方法

    ClassA ca = new ClassA();
    ca.send(); //set the value to 2
    ca.print();
B) 如果不想更改主方法(出于任何原因),可以将变量初始化移动到类构造函数:

    ClassA() {
      a = 2
    }

现在,当您实例化类(new ClassA())时,“a”将等于2。

理解类间变量解析的另一个更简单的方法是使用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;
    }   
}

希望这有帮助

代码不应该看起来像那样。OP的格式很糟糕。但是如果调用send(),那么“send()”方法里面还有很多函数呢。如果我喜欢上面的方法,它也会调用/执行其他方法/逻辑。那么,如果有人回答我的疑问,该怎么办呢?