java 中,protected 的方法被子类重写,那么...

现有代码
class A
{
A()//A的构造函数
{
f(); // 调用f方法
}

protected void f()// 受保护的 f 方法
{
System.out.printf("这是 A 类的 f 方法!\n");
}
}

class B extends A
{
B()//B的构造函数
{
super();//调用父类(class A)的构造方法!
}
protected void f()//重写父类的 f 方法!
{
System.out.printf("这经 B 类重写的的 f 方法!\n");
}
}

class Main
{
public static void main (String [] args)
{
B bb = new B();
}
}
/*
代码所见:
类 A 的构造函数会调用f方法。
A 的protected void f方法被子类 B 重写。
(子类) B 的构造方法 会调用(父类) A 的构造方法。

问题
若该程序执行,调用的 f 方法是谁的? 为什么?
*/

第1个回答  2016-07-26
调用B的f方法,,,
原因:父类引用调用了一个在子类中发生重写的方法时,会调用重写后的方法,这种机制叫做"虚方法调用"本回答被提问者采纳
第2个回答  2016-07-26
调用B的f方法。因为B类重写了f方法,一般情况下,可以认为,父类的同名方法已被子类覆盖了。本回答被网友采纳
相似回答