我不理解类继承的奇怪行为。
这是我的父母班:
public class Cubetti implements Token{
...
private int id=1;
...
public Cubetti(int n) {
numero = n;
}
...
public int getId() { return id; }
public void setId( int idx) { id = idx; }
...
}
这是子类:
public class RGC extends Cubetti{
private int id=0;
...
public RGC (int idx) {
super(0);
id = idx; // STRANGE BEHAVIOUR !
}
...
}
这是测试主类:
public static void main(String[] args) {
RGC uno = new RGC(1);
RGC due = new RGC(2);
System.out.println(" uno Id is " + uno.getId() + " due Id is" + due.getId());
}
输出是
Uno ID为1,到期ID为1
但是如果我在
RGC
子类上的标记行中使用:....
// id = idx;
setId(idx);
....
输出是
Uno ID为1,到期ID为2
为什么?
最佳答案
在id
超级类和Cubetti
子类中都有一个RGC
变量。使用setter和getter更新/返回超类的id
,因为这些方法是在超类中定义的,并且不会被子类覆盖。
在子类构造函数中调用id = idx
会修改子类的变量,因为子类的变量隐藏了超类的变量,即使它没有隐藏它,也无法从中访问它。子类,因为它是私有的。