如何在方法覆盖中解决对重写方法的调用?

时间:2014-07-03 19:37:27

标签: java method-overriding

根据我的理解,如果调用一个被覆盖的方法,那么该方法将根据运行时的对象来决定。

例如。

class A
{
  void fun1()
    {
      System.out.println("fun1 of clss A");
    }
}
class B extends A
{
  void fun1()
  {
     System.out.println("fun1 of class B");
   }
}

现在,

A a=new B();
a.fun1();

输出结果为:

fun1 of class B

但是

我无法理解以下程序的输出

class A
{
  void fun1()
    {
      System.out.println("fun1 of clss A");
    }
}
class B extends A
{
  void fun1()
  {
     System.out.println("fun1 of class B");
     fun2();
   }
  private void fun2()
 {
    System.out.println("fun2 of class B");
 }
}
class C extends B
{
    private void fun2()
 {
    System.out.println("fun2 of class C");
 }
}

现在,

A a =new C();
a.fun1();

提供输出:

fun1 of class B
fun2 of class B

(这意味着不是继承的fun1,但fun1是B类正在执行)

为什么? fun1被覆盖,但它不在C类中,C的对象是在运行时创建的?为什么B的fun1被执行?

1 个答案:

答案 0 :(得分:2)

C不会覆盖该方法。因此它继承了它的超类型的实现。那是被调用的那个。