close

物件的向上轉型

什麼是向上轉型?

將子類的物件賦值給父類的引用。

如以日常生活來說,桌上型電腦也可稱之為電腦,而同樣的筆記型電腦,也可以叫做電腦,因此電腦較為抽象所以為父類,而像筆記型電腦就可稱為子類,而如以向上轉型來說,即我們可將所有的筆記型電腦(子類)稱為電腦(父類),這樣的結論是正確的,而且不會有任何的錯誤產生。

語法格式,例如:

Student s = new Student();

Person p = s;        //向上轉型之語法

(或者寫成:Person p = new Student();)

 21_向上轉型示意圖.png  

 

向上轉型後之物件使用方法

1. 一個引用能夠調用哪些成員(包含了變數和函數),取決於這個引用的類型。例如:上述之p其類型為Person,因此只能使用Person類中繼有的變數和函數,而原物件(Student)新增的變數和函數就不能被使用了,需注意!!

2. 一個引用實際調用的是哪一個方法,取決於這個引用所指向的物件,即「子類中的變數與函數」。例如:PersonStudent中皆有introduce此一方法者,實際調用時則為Student中覆寫過的introduce(),而非Person中的,需注意!!

3. 只要需向上轉型的二個類為繼承關係者,向上轉型一定會成功的。

 

向上轉型程式範例

21_範例_Person.png 21_範例_Student.png 21_範例_Main.png 21_範例_Main結果.png  

 

物件的向下轉型

什麼是向下轉型?

將父類的物件賦值給子類的引用。

如相應日常生活的話,就以購買來的泡麵為例,其是先經包裝後消費者在要食用前,再將外包裝拆除以便食用,而此一經過也可稱為向下轉型,即s1就是那泡麵,而p是那包裝,消費拆開包裝使用就是s2

語法格式,例如:

Student s1 = new Student();

Person p = s1;                      //向上轉型

Student s2 = (Student)p;    //向下轉型

 21_向下轉型示意圖.png  

 

向下轉型的特點

1. 如要使用向下轉型前,需先向上轉型後,才能再向下轉型,需注意!!

2. 向下轉型語法格式中一定要加上(類型名)<如:(Student)>,且其稱之為「強制的類型轉換」

3. 如直接從父類向下轉型的話,那會造成執行上的錯誤,因人不一定是學生、電腦也不一定指的是筆記型電腦。相對的,如先向上轉型後再向下轉型會正確的原因在於,其物件本來就是子類(如筆記型電腦),我們只是先把它以父類的觀點(如電腦)包裝起來,後再返回成子類,其實它還是子類,所以不會產生錯誤。

 

向下轉型程式範例

21_範例_Main2.png   

 

 

arrow
arrow

    Elsa 發表在 痞客邦 留言(0) 人氣()