前幾天有人問我多型的概念,一時半會也沒說清。
這種基本概念有時經常能問倒人,特此在這寫一下,表述我對多型的理解。
多型就是明明是乙個a物體卻表現出b物體的行為。在**中,多型的實現務必要和繼承,重寫方法聯絡起來。
具體的說乙個父類,乙個子類。宣告的時候用父類,賦值的時候用子類。此時執行父類例項的方法的時候,呼叫的確實子類的方法。畫個圖配合文字更好理解。
father f=new son();//子類的內容賦值給父類。?
如此圖,當呼叫f.a()的時候,實際呼叫的是子類a的方法。方法a必須是override過的。這種多型的能力在模式設計的時候,比如工廠模式的時候,很有用的。
還有一點,雖然f是father 型的,但是給他的例項是son型別,所以f.gettype()得到的是son型別的。
注意父類的a方法必須是virtual,abstract的或者本身是override的,不然子類無法override的。所以virtual通常和override成對出現,表示此方法可以被override,單獨寫個virtual也沒啥意義。
關於子類和父類
子類包含的資訊大於父類,所以子類可以隱式的轉成父類,父類所需要的資訊,子類都有,所以父類不擔心有什麼內容獲不到。但是父類轉成子類,子類需要的內容,父類不一定會有,因此父類無法轉成子類。
father f = new father();
son s = (son)f;//這樣會報錯的。
//對於上面這種方式,如果需要轉型賦值的話,可以使用json方式巧妙的轉型
string json = jsonhelper.tojson(f);
son s = jsonhelper.fromjson(json);
但是如果f賦值的時候賦值的是son,則可以轉型。
father f = new son();//子類的內容賦值給父類。
son s = (son)f;//不會報錯
c c 多型的概念
預備知識 c 賦值相容原則 乙個公有派生類的物件在使用上可以被當做基類的物件,反之則禁止。派生類的物件可以被賦值給基類物件。派生類的物件可以初始化基類的引用 指標也一樣 多型的概念 1 先期聯編 能夠在編譯時就能夠確定哪個過載的成員函式被呼叫的情況 2 後期聯編 多型性 系統在執行時,能夠根據其引數...
C 多型的概念
完成某一行為,不同物件去做,會有不同的效果必須通過基類的指標或者引用呼叫虛函式 被呼叫的函式必須是虛函式,子類繼承了父類,且派生類必須對基類的虛函式進行重寫 下面來解釋這兩個條件的具體含義。首先在編寫多型程式的時候,希望父物件裡的某個函式能實現多型功能,就必須將其加virtual修飾,且在派生物件中...
多型的概念和作用
多型是物件導向的重要特性,簡單點說 乙個介面,多種實現 就是同一種事物表現出的多種形態。程式設計其實就是乙個將具體世界進行抽象化的過程,多型就是抽象化的一種體現,把一系列具體事物的共同點抽象出來,再通過這個抽象的事物,與不同的具體事物進行對話。對不同類的物件發出相同的訊息將會有不同的行為。比如,你的...