JAVA 多型操作----父類與子類轉換問題例項分析
阿新 • • 發佈:2020-05-22
本文例項講述了JAVA 多型操作----父類與子類轉換問題。分享給大家供大家參考,具體如下:
JAVA語言中,物件變數是多型的
每個子類物件都算是父類物件(子類物件可以當作父類變數所引用)
那反過來可不可以呢?
答案是取決於父類變數引用的是誰
如果父類變數引用的是子類物件的例項,可以通過強轉被子類變數引用
如果父類變數引用的是父類物件的例項,則不能被為子類變數引用
上程式碼舉例子(本篇一直用這兩個類舉例子,main測試不同):
一個Father類
package test; public class Father { int fatherA; Father(int a) { fatherA=a; } }
一個Son類
package test; public class Son extends Father { int sonB; Son(int a,int b) { super(a); sonB=b; } }
把子類物件賦給父類變數:
package test; public class MainTest { public static void main(String[] args) { Son son1=new Son(1,2); Father father1=son1; //子類物件被父類變數引用 System.out.println(father1.fatherA); } }
結果: 賦值成功!
把父類引用賦值給子類變數分兩種情況:
1.父類引用的是子類物件:
package test; public class MainTest { public static void main(String[] args) { Father father2=new Son(1,2); //父類引用了子類物件的例項 Son son2=(Son)father2; System.out.println(son2.sonB); } }
結果:轉換成功!
這裡注意即使引用的是子類例項轉換成子類也需要強轉,否則會報錯
2.父類引用的是父類的例項:
package test; public class MainTest { public static void main(String[] args) { Father father2=new Father(1); //父類引用了子類物件的例項 Son son2=(Son)father2; System.out.println(son2.sonB); } }
結果:失敗!
結論:
- 子類物件可以當作父類物件使用(子類的引用可以賦值給父類變數),
- 父類的引用如果是:
- 子類的例項,可以通過強轉賦值給子類引用
- 父類的例項,不能被子類引用
其實細想new出的物件之間本身是不能轉換的,我們賦值的是類的引用,
總的來說就是父類變數可以應用父類例項,也可以引用子類例項,
子類變數只能引用子類例項
這也就是開篇所說的 : 子類物件算是父類物件
更多關於java相關內容感興趣的讀者可檢視本站專題:《Java面向物件程式設計入門與進階教程》、《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》
希望本文所述對大家java程式設計有所幫助。