gpt4 book ai didi

java - 了解 Java 继承 : strange behaviour

转载 作者:行者123 更新时间:2023-11-29 05:15:23 24 4
gpt4 key购买 nike

我不明白类继承的奇怪行为。

这是我的父类:

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 is 1 and due Id is 1

但是如果我在 RGC 子类的标记行中使用:

....
// id = idx;
setId(idx);
....

输出是

Uno Id is 1 and due Id is 2

为什么?

最佳答案

您在 Cubetti 父类(super class)和 RGC 子类中都有一个 id 变量。使用 setter 和 getter 更新/返回父类(super class)的 id,因为这些方法是在父类(super class)中定义的,不会被子类覆盖。

在子类的构造函数中调用id = idx修改了子类的变量,因为子类的变量隐藏了父类(super class)的变量,即使没有隐藏,您将无法从子类访问它,因为它是私有(private)的。

关于java - 了解 Java 继承 : strange behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com