我有一个类,其变量计数为0。 测试类由A类和B类扩展。 我将A中的计数设置为50。 现在我想访问B中的计数,它应该将值返回为50,但是我在B中得到0。 我是java的新手,我不知道它是如何工作的:( 任何人都可以帮我解决这个问题吗? :(
Public Class Extend {
public int count =0;
}
Public class a extends Extend {
this.count = 50;
}
public class b extends Extend {
system.out.println ( " count is " + count);
}
答案 0 :(得分:3)
Extend
的每个实例(包括扩展它的任何类的实例)都会获得自己的count
副本。实例之间不共享这些值。
您可以更改b
以扩展课程a
,而不是课程Extend
。然后,b
的任何实例都会看到执行a
构造函数时所做的任何初始化。
如果您希望类或其子类的所有实例共享相同的count
,则需要创建字段static
:
public class Extend {
public static int count = 0;
}
在子类中,您可以引用不带this.
的字段名作为限定符。
请注意,您发布的代码不是合法的Java。前两个类应为public class
,而不是Public Class
或Public class
。此外,您不能在方法或初始化程序块之外使用this.count = 50;
之类的代码。我假设这不是你真正的代码。
答案 1 :(得分:1)
尝试从this网站开始进行Java继承。
您将0作为值,因为在B类中您没有设置B类的局部变量count
的值。因此,您尝试读取的count
的值将从Extend超类继承。
但是,您将A类中count
的值设置为50,但该变量仅对A类是本地的,并且在此关系中不能由B类访问。
答案 2 :(得分:0)
在课程b
中,您从count
获得了Extend
,这就是0
的原因。你可以这样做:
class b extends a {
System.out.println("count: " + count);
}
答案 3 :(得分:0)
Public Class Extend {
public int count = 0;
}
Public class A extends Extend {
this.count = 50;
}
public class B extends Extend {
public void showMessage() {
//this will print 0 if you don't change count value in your main method
system.out.println ("count is " + this.count);
}
}
尝试使用它:
Public Class Extend {
public int count = 0;
}
Public class A extends Extend {
this.count = 50;
}
public class B extends Extend {
private Extend myExtend;
public B(Extend myExtend) {
this.myExtend = myExtend;
}
public void showMessage() {
system.out.println (" count is " + this.myExtend.count);
}
}
现在在你的主要课程中你可以使用这个
Extend eA = new A();
Extend eB = new B(eA);
eb.showMessage(); //this will print 50
答案 4 :(得分:0)
你可以static
。实例之间共享static
个字段;如果您更改子类中的一个静态变量,父,那么之后创建的所有子类的实例将共享更改的值。
考虑这些课程:
Father.java
class Father {
protected static int i;
public Father() {
System.out.println("Father: " + i);
}
}
Child.java:
class Child extends Father {
public Child() {
i = 4;
System.out.println("Child: i: " + i);
System.out.println("Child: this.i: " + this.i);
System.out.println("Child: super i: " + super.i);
}
}
Daughter.java:
public class Daughter extends Father {
public Daughter() {
System.out.println("Daughter: i: " + Daughter.i);
}
}
Main.java:
class Main {
public static void main(String[] args) {
System.out.println("First daughter");
Daughter daughter = new Daughter();
Father father = new Father();
Child child = new Child();
System.out.println("Second daughter");
Daughter daughter2 = new Daughter();
}
}
输出:
First daughter
Father: 0
Daughter: i: 0
Father: 0
Father: 0
Child: i: 4
Child: this.i: 4
Child: super i: 4
Second daughter
Father: 4
Daughter: i: 4