gpt4 book ai didi

java - 为什么继承在 Java 中以这种方式工作?

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

我是 Java 新手,我试图通过模拟以下程序来了解当我将子类实例分配给父类实例变量时会发生什么。

public class ConfusionWithInheritance {

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
DerievedClass d = new DerievedClass();
BaseClass b = BaseClass.class.cast(d);
BaseClass b1 = new DerievedClass();
b.doSomeJob();
b.printMagic(); //-> Compiler shouted me that it didn't know this method here.
}
}
class BaseClass {
public void doSomeJob() {
System.out.println("Printing Value X");
}
}
class DerievedClass extends BaseClass {
public void doSomeJob() {
System.out.println("Printing Value Y");
}
public void printMagic() {
System.out.println("Printing magic...");
}
}

1) 为什么我可以将子类的实例分配给父类型变量?

2)从此answer ,它解释说,因为我告诉类的蓝图是 - 父类 - 它只知道父类中的方法。那为什么当我调用childInstance.doSomeJob()时它会打印子类方法中的值呢?

最佳答案

这归结为编译时和运行时之间存在差异。

编译时可用方法是对象声明所用类型中的方法。
运行时调用的方法是实例化对象类型中的方法。

因此,对于声明为 BaseClass 类型并实例化为 DerivedClass 类型的对象,可用的方法将是 BaseClass 中的方法,即。 doSomeJob(),但调用的方法是 DerivedClass 中的方法。

关于java - 为什么继承在 Java 中以这种方式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313443/

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