多型表現在兩個方面
1.乙個父型別的引用在指向不同的物件時會有不同的實現;
如:iunionpay atm;
atm = new atmabc(); atm = new atmcbc();
總結,執行時,方法執行看物件!
2.乙個子型別物件,「向上造型」成不同的父型別時,可以使用的功能不一樣
「向上造型」指子類型別的變數,可以自動「向上」轉化為父型別的變數。
atmcbc cbc = new atmcbc();
iunionpay atm = cbc;//變數cbc向上造型為父型別iunionpay型別
再比如:因為atmcbc類實現了ipolice介面,所以
ipoloce pol = cbc;//編譯正確,變數cbc同樣可以向上造型為ipolice型別
這裡父型別可以是抽象類,也可以是介面(父型別的變數僅能使用子型別重寫父類的方法)
優點:動態排程,不同的物件可以呼叫不同的方法
缺點:父型別變數只能呼叫子類中重寫父類的方法
例如:1. ipolice pol = new atmcbc();//父型別變數只能使用takpic方法
atmcbc c = pol;//編譯錯誤:父型別轉換為子型別需要強制轉換!
atmcbc
c= (atmcbc)
pol;
//編譯正確。因為pol變數所指向的實際物件型別為atmcbc,目標型別也是atmcbc;
2. atmcbc
c= (atmcbc)
pol;
iunionpay p =(iunionpay)pol;
//因為實際物件時atmcbc型別,目標型別時iunionpay型別。實際物件型別是目標型別的子型別。
3.atmabc aa = (atmcbc)pol;
//編譯正確,但執行錯誤;因為pol指向的物件型別,不是atmabc的子型別
強轉看物件!目標型別必須是物件型別本身或者物件的父型別
引用變數的強制型別轉換 instanceof
引用變數只能呼叫它編譯時的型別方法,而不能呼叫它執行時型別的方法。強制型別轉換 1.基本型別之間的轉換只能在數值型別之間進行。數值型別與布林型別不能轉換。2.引用型別之間的轉換只能在具有繼承關係的兩個型別之間進行,如果試圖把乙個父類例項轉換為乙個子類型別,則這個物件必須實際上是子類型別 即編譯時時父...
多型 引用型別的強制型別轉換 final關鍵字
一 多型 多型性是oop中的乙個重要特性,主要是用來實現動態聯編的,換句話說,就是程式的最終狀態只有在執行過程中才被決定而非在編譯期間就決定了。這對於大型系統來說能提高系統的靈活性和擴充套件性 programmer p1 new chinese 建立子類物件 賦值給其父類的引用變數 呼叫方法 如果方...
強制型別轉換
關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...