4、java的多態

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引用的是父類的變量,只有方法有多態,成員變量沒有多態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章