我不理解类继承的奇怪行为。

这是我的父母班:

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会修改子类的变量,因为子类的变量隐藏了超类的变量,即使它没有隐藏它,也无法从中访问它。子类,因为它是私有的。

10-06 01:28