今天一直在爲一段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 !