◎物件的向上轉型
●什麼是向上轉型?
將子類的物件賦值給父類的引用。
如以日常生活來說,桌上型電腦也可稱之為電腦,而同樣的筆記型電腦,也可以叫做電腦,因此電腦較為抽象所以為父類,而像筆記型電腦就可稱為子類,而如以向上轉型來說,即我們可將所有的筆記型電腦(子類)稱為電腦(父類),這樣的結論是正確的,而且不會有任何的錯誤產生。
語法格式,例如:
Student s = new Student();
Person p = s; //向上轉型之語法
(或者寫成:Person p = new Student();)
●向上轉型後之物件使用方法
1. 一個引用能夠調用哪些成員(包含了變數和函數),取決於這個引用的類型。例如:上述之p其類型為Person,因此只能使用Person類中繼有的變數和函數,而原物件(指Student)中新增的變數和函數就不能被使用了,需注意!!
2. 一個引用實際調用的是哪一個方法,取決於這個引用所指向的物件,即「子類中的變數與函數」。例如:Person與Student中皆有introduce此一方法者,實際調用時則為Student中覆寫過的introduce(),而非Person中的,需注意!!
3. 只要需向上轉型的二個類為繼承關係者,向上轉型一定會成功的。
●向上轉型程式範例
◎物件的向下轉型
●什麼是向下轉型?
將父類的物件賦值給子類的引用。
如相應日常生活的話,就以購買來的泡麵為例,其是先經包裝後消費者在要食用前,再將外包裝拆除以便食用,而此一經過也可稱為向下轉型,即s1就是那泡麵,而p是那包裝,消費拆開包裝使用就是s2。
語法格式,例如:
Student s1 = new Student();
Person p = s1; //向上轉型
Student s2 = (Student)p; //向下轉型
●向下轉型的特點
1. 如要使用向下轉型前,需先向上轉型後,才能再向下轉型,需注意!!
2. 向下轉型語法格式中一定要加上「(類型名)」<如:(Student)>,且其稱之為「強制的類型轉換」。
3. 如直接從父類向下轉型的話,那會造成執行上的錯誤,因人不一定是學生、電腦也不一定指的是筆記型電腦。相對的,如先向上轉型後再向下轉型會正確的原因在於,其物件本來就是子類(如筆記型電腦),我們只是先把它以父類的觀點(如電腦)包裝起來,後再返回成子類,其實它還是子類,所以不會產生錯誤。
●向下轉型程式範例
留言列表