根据我的理解,如果调用一个被覆盖的方法,那么该方法将根据运行时的对象来决定。
例如。
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被执行?
答案 0 :(得分:2)
C
不会覆盖该方法。因此它继承了它的超类型的实现。那是被调用的那个。