2、動態綁定機制
方法綁定:創建方法調用和方法本體之間關聯,分爲早綁定,即程序執行前綁定;晚綁定,即執行時根據對象類型進行綁定。
如何動態綁定的途徑:
- 虛方法(virtual),容許對不一樣類中的同名方法有不一樣的實現,並在運行期進行綁定。使用規則:1)用關鍵字virtual聲明;2)使用覆蓋(override)替換或擴展虛方法;3)被覆蓋的虛方法參數列表不能更改。
- 動態方法(dymatic),和虛方法基本一致。
多態須要具有的條件:
- 基類定義了一個或多個虛方法
- 一個或多個派生類覆蓋那些虛方法
- 一個實例變量(或參數),其類型是基類,但實際上它引用的是某個派生類的一個實例。
3、類型轉換機制
類型:分爲值類型,是一些簡單的數據類型,如Char;引用類型,是一些複雜的類型,如類,對象接口。
向上轉型:
- 向上轉型是安全的,由於任何派生類都繼承自基類,擁有基類的接口(方法)。
- 可以面向接口編程。
向下轉型:
- 是一種強制轉換,須指明確切類型。
- 在對象參數傳遞中,經過向上轉型傳遞一個派生類對象參數,在獲得該對象後,每每須要向下轉型,恢復原來的面貌
- 在對象容器(TObjectList)中取出一個對象時,須要向下轉型,不然獲得TObject類型。
4、抽象接口機制
接口:規定」作什麼「而無論」怎麼作「,即它關心的是方法定義的參數,而不是具體實現。它分爲寬接口,即delphi的類(一般是抽象類)和對象接口所聲明的方法;窄接口,即對象接口,依附於類,可是不能直接實例化,也不能本身實現方法。
抽象類:爲派生類定義公共接口,把方法的實現延遲到派生類中。不能實例化,用abstract 限定virtual,dynamic,或override。
抽象類的使用原則:
- 擁有儘量多的公共代碼。
- 擁有儘量少的數據,以區別具體類。
接口對象的使用;
- 一般繼承一個已有的接口來聲明一個新接口。
- 接口繼承自IInterface接口
|
相同點 |
不一樣點 |
抽象類 |
不能實例化;提供抽象方法 |
一個類只能繼承一個抽象類;派生類能夠部分實現; |
對象接口 |
不能實例化;提供抽象方法 |
一個類能夠繼承多個接口;全部方法都是public;實現接口的類須要實現接口全部的方法; |
對接口而不是對實現編程:根據抽象類或對象接口中定義的接口來操縱對象。對象的類(class)定義了對象是怎樣實現的,同時也定義了對象的內部狀態和操做實現,而對象的類型只與它的接口相關。在delhi中,類既指對象的類型又制定了對象的實現,但對象接口僅指定對象的類型未指定對象的實現。