今天一直在为一段code困惑,基类A中定义了一个抽象方法,并在子类B中实现,类C继承了class B,并重载了这个方法。现在在基类中调用这个方法,那么基类会去调用哪个类中的方法呢?
实际上这个问题很简单,答案是调用class C中的实现方法。如果class C中没有,则调用class C父类的方法。今天居然纠结在这里,还好DL一语令我恍然大悟。其实我在自学java时也忽略了这个地方。
下面的代码就是很好的例子
public abstract class A { public abstract String print(); public void fun() { System.out.println(print()); }}
public class B extends A{ public B() { super.fun(); } public String print() { return "This is Class B !"; } public void fun() { System.out.println(print()); }}
public class C extends B{ public C() { super.fun(); } public String print() { return "This is Class C !"; } }
public class Test{ public static void main(String[] args) {
new B(); new C(); }}
输出的结果就是
This is Class B !
This is Class C !
This is Class C !