当我将对象转换为其超类型时,我是否可以访问原始或重写的方法?

时间:2014-06-07 19:00:30

标签: java inheritance

考虑以下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áš");

输出结果是什么?

2 个答案:

答案 0 :(得分:0)

输出显然对应于

System.out.println("You are NOT welcome, "+name+"!");

让子类方法是超类只允许你的代码编译。

输入后

test.hello("Tomáš");

然而,在运行时,Greeter_mean的方法被称为实例,如果真的是Greeter_mean类型。

答案 1 :(得分:-2)

您可以将对象扩展想象为原始对象的shell。如果你把它变成超类型,它就会失去它的外壳。 (直到你把它扔掉) 至少这是我学习它的方式。