/*********************************************
* 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();
}
}