[英]how to modify parent class variable with the child class and use in another child class in java
我有一个类测试,其变量计数为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);
}
Extend
每个实例(包括扩展它的任何类的实例)都有自己的count
副本。 实例之间不共享这些值。
您可以更改b
以扩展类a
而不是类Extend
。 随后的任何实例b
会看到什么时初始化做a
构造函数执行。
如果希望所有类或其子类的实例共享相同的count
,则需要将该字段设为static
:
public class Extend {
public static int count = 0;
}
在子类中,您将在没有this.
情况下引用字段名称this.
作为资格赛。
请注意,您发布的代码不是合法的Java。 前两个类应该是public class
,而不是Public Class
或Public class
。 此外,你不能有像this.count = 50;
代码this.count = 50;
在方法或初始化块之外。 我假设这不是你真正的代码。
尝试从这个网站开始进行Java继承。
您将0作为值,因为在B类中您没有设置B类本地变量count
。 因此,您尝试读取的count
值继承自Extend超类。
但是,您将类A中count
的值设置为50,但该变量仅对A类是本地的,并且在此关系中不能由B类访问。
在b
类中,你从Extend
得到count
,这就是它为0
的原因。 你可以这样做:
class b extends a {
System.out.println("count: " + count);
}
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
你可以把它变成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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.