class BaseClass
{
public int book = 6;
public void base()
{
System.out.println("父類的普通方法");
}
public void test()
{
System.out.println("父類的test方法");
}
}
class SubClass extends BaseClass
{
public String book = "子類的book";
public void test()
{
System.out.println("子類的test");
}
public void sub()
{
System.out.println("子類的普通方法");
}
}
public class Polymorphism {
public static void main(String[] args)
{
BaseClass ploymophicBc = new SubClass();
System.out.println(ploymophicBc.book);
ploymophicBc.base();
ploymophicBc.test();
//ploymophicBc.sub();
}
}
輸出結果:
6
父類的普通方法
子類的test
父類BaseClass,子類SubClass。
聲明BaseClass ploymophicBc = new SubClass();
則ploymophicBc的編譯時類型是BaseClass,運行時類型是SubClass;
ploymophicBc.test()調用的是子類的test(),因爲在運行時ploymophicBc這個對象總是表現出運行時類型的行爲。
而ploymophicBc.sub()是不能通過編譯的,因爲編譯時類型BaseClass沒有這個方法。
這就是java的多態,跟c++差不多,不用寫virtual,全部自帶virtual。
注意,子類隱藏父類方法必須要兩個方法的返回值也是一樣的!!
ploymophicBc.book引用的是父類的變量,只有方法有多態,成員變量沒有多態。