1

我的代码是

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 的方法呢?

请帮帮我。

4

5 回答 5

1

创建的对象是 type Beta,因为它是由new. 因此,当被调用时,无论您在代码中“调用”它什么foo(),它都在处理一个对象。Beta

于 2012-08-08T18:36:08.970 回答
1

将对象转换或引用为其超类不会取消覆盖方法。即使您最初将其作为对象引用,该foo()方法仍在对象上被调用。BetaAlpha

于 2012-08-08T18:36:16.883 回答
0

当父类变量引用子类对象时,该引用将调用子方法。

于 2012-08-08T18:36:38.320 回答
0

您只有一个 Beta 类型的对象。强制转换对象不会使 java 使用父方法。

于 2012-08-08T18:37:20.893 回答
0

在java中,方法默认是虚拟的。在决定实际调用什么方法时,底层对象的类型很重要,而不是对象引用的类型。

于 2012-08-08T18:39:07.923 回答