考虑以下Java类和另一个覆盖其方法hello()
的类。
class Greeter {
public void hello(String name) {
System.out.println("Hello "+name+".");
}
}
class Greeter_mean extends Greeter {
public void hello(String name) {
System.out.println("You are NOT welcome, "+name+"!");
}
}
现在,我将创建一个Greeter_mean
的实例,但我会将其投放到Greeter
。
Greeter test = (Greeter)new Greeter_mean();
test.hello("Tomáš");
输出结果是什么?
答案 0 :(得分:0)
输出显然对应于
System.out.println("You are NOT welcome, "+name+"!");
让子类方法是超类只允许你的代码编译。
输入后即test.hello("Tomáš");
。
然而,在运行时,Greeter_mean的方法被称为实例,如果真的是Greeter_mean类型。
答案 1 :(得分:-2)
您可以将对象扩展想象为原始对象的shell。如果你把它变成超类型,它就会失去它的外壳。 (直到你把它扔掉) 至少这是我学习它的方式。