gpt4 book ai didi

java - OOP - 继承 [Java]

转载 作者:行者123 更新时间:2023-12-02 02:27:15 26 4
gpt4 key购买 nike

bb 指派生类,当我调用 show() 方法时,但当我打印 bb.b 时 - 打印基类属性。为什么会发生这种情况?

class Base {
int b=10;
public void show() {

System.out.println("Base show() called");

}
}



class Derived extends Base {

int b=20;
public void show() {

System.out.println("Derived show() called");

}

}

public class MainClass {

public static void main(String[] args) {

Base bb = new Derived();;

bb.show();
System.out.println(bb.b);

}

}

输出:

调用派生的 show()

10

最佳答案

当您将变量声明为 Base 时obj (即 Base bb = new Derived(); ),这并不意味着您的 b对象不再是 Derived 的实例(使用 b instanceof Derived 验证这一点)。

这称为隐藏,类似于人们在声明稍后可能更改实现的变量时通常所做的事情,例如 private List<String> someList = new ArrayList<>(); 。用更专业的术语来说:这是一种将代码与特定实现解耦的方法。

至于为什么b是 10(Base 类的值)而不是 20:那是因为您明确引用 bBase类(正如蒂莫西·特拉克尔的回答所提到的)。如果您要显式转换 b对象返回Derived输入,您将看到打印的是 20:

System.out.println(((Derived)b).b);

关于java - OOP - 继承 [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631469/

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