先上**
package輸出如下com.fuzi.demo;
public
class
fuzi
}class
fulei
public
void
fun()
}class zilei extends
fulei
}
首先需要明白多型的定義:
1、使用父類型別的引用指向子類的物件;
2、如果子類重寫了父類的虛方法,那麼呼叫這個方法的時候,將會先呼叫子類的方法--動態呼叫/動態連線;
3、父類引用指向子類物件---也稱之為「上溯造型」,父類的方法稱之為「虛方法」,需要注意的是:方法是呼叫子類自己的(如果子類沒有才去呼叫父類的),屬性是呼叫父類的。
總結如下:
繼承、重寫、父類引用指向子類物件
順便說一下型別轉換的問題:
1、父物件=new 父類();
2、子物件=new 子類();
3、父物件=new 子類();
4、{父物件=new 子類();
子物件=(子類)父物件; //強制型別轉換
需要注意的是:
5、{父物件=new 父物件();
子物件=(子類)父物件;
5是不對的,
原因:在new乙個子類物件的時候,會在堆記憶體中申請空間來儲存子類物件,
另外,了解一下jvm初始化步驟:
1、假如這個類還沒有被載入和連線,則程式先載入並連線該類
2、假如該類的直接父類還沒有被初始化,則先初始化其直接父類
3、假如類中有初始化語句,則系統依次執行這些初始化語句
所以初始化子類的時候,父類會先被初始化。
子類繼承父類,他可能會比父類擁有更多的方法或者成員變數,子類轉換城父類屬於向上轉型,及多型。
在5中例項化的物件是父類,子類並沒有被分配空間,如果把父類的例項化物件強轉為子類,子類就是乙個空殼子,必然會造成型別轉換異常。
父類引用指向子類物件
要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者就是前者是父類。我可以通過 cat c new cat 例項化乙個cat的物件,這個不難理解。但當我這樣定義時 animal a new cat 這代表什麼意思呢?很簡單,它表示我定義了乙個animal...
父類引用指向子類物件
是多型的一種實現方式 這樣做使程式靈活性更好,若有多個子類,只需改變引用就能實現不同的功能,而不需要改變程式 父類 a 子類 a1,a2 a obj1 new a1 a obj2 new a2 如果a有乙個方法是show 子類實現了show 那麼obj1.show 就是第乙個子類的show obj2...
父類引用指向子類物件
package fuleiyinyongzhixiang public class animal public void sleep package fuleiyinyongzhixiang public class person extends animal public void play pa...