【发布时间】:2017-02-15 13:18:12
【问题描述】:
假设存在以下类:
public class A {
public void whatAreYou() {
System.out.println("A");
}
}
___________________________
public class B extends A {
public void whatAreYou() {
System.out.println("B");
}
}
现在,我们用以下方式初始化 a 和 b:
A b = new B();
b.whatAreYou();
_______________
B a = new A();
a.whatAreYou();
问题是:这些程序能正常运行吗?如果没有,他们有什么不能犯的错误?
我的看法:
我认为第一个程序应该可以正常工作,因为 B 类是 A 类的扩展。但我不知道我们这里有什么样的对象。它是否也具备 B 的所有属性?除此之外,它应该打印“B”。
第二个程序不起作用,但我缺乏明确的解释。
有人可以帮帮我吗?
【问题讨论】:
-
当你尝试编译它时会发生什么?第二个程序“不工作”——编译器给你什么错误信息?批判性地阅读它们。
-
A 不是 B。每只狗都是动物,但并非每只动物都是狗。你不能让小猫叫
-
@HovercraftFullOfEels:它只是告诉我 A 不能转换为 B。