【第六課】面向對象編程---多態的基礎

/*********************************************
 * Time:2016年11月16日 21:27:11
 * Purpose:多態的基礎_1
 * Author:ZJY
 * Summary:子類可以當作父類來看待,但父類不能當
 			作子類看待;
 * KnowledgePoint:
 			1.java中的繼承不是現實中的繼承,實際上java中
 			   的繼承反應的是一般到特殊的關係
 			2.父類代表一般,如:人;子類代表特殊,如:男人;
 			  所以子類可以被當作父類來看待,因爲男人一定
 			  都是個人;但父類不能被當作子類來看待,因爲
 			  人不一定都是男人;
 			3.在程序中的理解:因爲子類繼承父類的屬性和方法,
 			  當把子類當作父類來看待時,因爲子類包含了父類
 			  的所有方法和屬性,所以並沒有衝突;而當把父類
 			  當作子類來看待時,子類的特有的屬性和方法父類
 			  並沒有,則與實際衝突,所以父類不能被當作子類
 			  來看待。	
*********************************************/
class A
{
	public void f()
	{
		System.out.printf("AAAA\n");
	}
}

class B extends A
{
	public void f()
	{
		System.out.printf("BBBB\n");
	}
}

public class TestPoly_1
{
	public static void main(String[] args)
	{
		A aa1 = new A();
		B bb1 = new B();
		
		aa1.f();
		bb1.f();
		
		aa1 = bb1; //把bb1當作aa1來看待  子類可以被當作父類看待
		//bb1 = aa1; // error //把aa1當作bb1來看待  父類不能被當作子類看待

		aa1.f();
		
	}
}
/*********************************************
 * Time:2016年11月16日 22:29:54
 * Purpose:多態的基礎_2
 * Author:ZJY
 * Summary:多態:通過將子類的引用發送給父類的引用
 		實現調用父類的方法間接調用了子類的方法。
 * KnowledgePoint:
 		1.多態的作用: 實現同一個方法在不同的地方處理的
 		  內容不同;(實際上首先在子類中對從父類繼承過來
 		  的方法重寫該方法,與之與父類中該方法的操作不
 		  一樣。然後將子類的引用發送給父類,當在發送之
 		  前父類對應的引用調用的是父類中的該方法,但在
 		  發送後,調用的則是子類中的方法。現實了同一個
 		  方法在不同地方實現不同的操作的目的。)			
*********************************************/
class A
{
	public void f()
	{
		System.out.printf("AAAA\n");
	}
}

class B extends A
{
	public void f()
	{
		System.out.printf("BBBB\n");
	}
}

public class TestPoly_2
{
	public static void main(String[] args)
	{
		A aa1 = new A();
		B bb1 = new B();
		
		aa1.f(); //這個方法與下面的同名方法執行不同的處理
		bb1.f();
		
		/*aa1:A對象的引用,bb1:B對象的引用 */
		aa1 = bb1; 
		
		aa1.f();
		
	}
}


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