我的代码是
class Alpha
{
public void foo()
{
System.out.print("Alpha ");
}
}
class Beta extends Alpha
{
public void foo()
{
System.out.print("Beta ");
}
public static void main(String[]args)
{
Alpha a = new Beta();
Beta b = (Beta)a;
a.foo();
b.foo();
}
}
输出: -
Beta Beta
我是java的新手,这是我第一次遇到的这种实例化,这就是为什么我无法理解为什么输出不是
Alpha Beta
如果'a'是Alpha类的对象那么为什么不调用Alpha的方法?
请帮帮我。
答案 0 :(得分:1)
创建的对象是Beta
类型,因为它是由new
创建的。因此,当调用foo()
时,无论您在代码中“调用”它,它都会处理Beta
对象。
答案 1 :(得分:1)
将Object作为其超类进行转换或引用不会取消覆盖方法。即使您最初将foo()
对象作为Beta
对象引用,Alpha
方法仍会在{{1}}对象上调用。
答案 2 :(得分:0)
当父类变量引用子类对象时,引用将调用子方法。
答案 3 :(得分:0)
您只有一个Beta类型的对象。转换对象不会使java使用父方法。
答案 4 :(得分:0)
在java中,默认情况下方法是虚拟的。在决定实际调用什么方法时,底层对象的类型很重要,而不是对象引用的类型。