国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

繼承:重新使用接口

2019-11-18 12:09:41
字體:
來源:轉載
供稿:網友

  就其本身來說,對象的概念可為我們帶來極大的便利。它在概念上答應我們將各式各樣數據和功能封裝到一起。這樣便可恰當表達“問題空間”的概念,不用刻意遵照基礎機器的表達方式。在程序設計語言中,這些概念則反映為具體的數據類型(使用class要害字)。
  我們費盡心思做出一種數據類型后,假如不得不又新建一種類型,令其實現大致相同的功能,那會是一件非常令人灰心的事情。但若能利用現成的數據類型,對其進行“克隆”,再根據情況進行添加和修改,情況就顯得理想多了。“繼續”正是針對這個目標而設計的。但繼續并不完全等價于克隆。在繼續過程中,若原始類(正式名稱叫作基礎類、超類或父類)發生了變化,修改過的“克隆”類(正式名稱叫作繼續類或者子類)也會反映出這種變化。在java語言中,繼續是通過extends要害字實現的
  使用繼續時,相當于創建了一個新類。這個新類不僅包含了現有類型的所有成員(盡管PRivate成員被隱藏起來,且不能訪問),但更重要的是,它復制了基礎類的接口。也就是說,可向基礎類的對象發送的所有消息亦可原樣發給衍生類的對象。根據可以發送的消息,我們能知道類的類型。這意味著衍生類具有與基礎類相同的類型!為真正理解面向對象程序設計的含義,首先必須熟悉到這種類型的等價關系。
  由于基礎類和衍生類具有相同的接口,所以那個接口必須進行非凡的設計。也就是說,對象接收到一條特定的消息后,必須有一個“方法”能夠執行。若只是簡單地繼續一個類,并不做其他任何事情,來自基礎類接口的方法就會直接照搬到衍生類。這意味著衍生類的對象不僅有相同的類型,也有同樣的行為,這一后果通常是我們不愿見到的。
  有兩種做法可將新得的衍生類與原來的基礎類區分開。第一種做法十分簡單:為衍生類添加新函數(功能)。這些新函數并非基礎類接口的一部分。進行這種處理時,一般都是意識到基礎類不能滿足我們的要求,所以需要添加更多的函數。這是一種最簡單、最基本的繼續用法,大多數時候都可完美地解決我們的問題。然而,事先還是要仔細調查自己的基礎類是否真的需要這些額外的函數。
  1 改善基礎類
  盡管extends要害字暗示著我們要為接口“擴展”新功能,但實情并非肯定如此。為區分我們的新類,第二個辦法是改變基礎類一個現有函數的行為。我們將其稱作“改善”那個函數。
  為改善一個函數,只需為衍生類的函數建立一個新定義即可。我們的目標是:“盡管使用的函數接口未變,但它的新版本具有不同的表現”。
  2 等價與類似關系
  針對繼續可能會產生這樣的一個爭論:繼續只能改善原基礎類的函數嗎?若答案是肯定的,則衍生類型就是與基礎類完全相同的類型,因為都擁有完全相同的接口。這樣造成的結果就是:我們完全能夠將衍生類的一個對象換成基礎類的一個對象!可將其想象成一種“純替換”。在某種意義上,這是進行繼續的一種理想方式。此時,我們通常認為基礎類和衍生類之間存在一種“等價”關系——因為我們可以理直氣壯地說:“圓就是一種幾何外形”。為了對繼續進行測試,一個辦法就是看看自己是否能把它們套入這種“等價”關系中,看看是否有意義。
  但在許多時候,我們必須為衍生類型加入新的接口元素。所以不僅擴展了接口,也創建了一種新類型。這種新類型仍可替換成基礎類型,但這種替換并不是完美的,因為不可在基礎類里訪問新函數。我們將其稱作“類似”關系;新類型擁有舊類型的接口,但也包含了其他函數,所以不能說它們是完全等價的。舉個例子來說,讓我們考慮一下制冷機的情況。假定我們的房間連好了用于制冷的各種控制器;也就是說,我們已擁有必要的“接口”來控制制冷。現在假設機器出了故障,我們把它換成一臺新型的冷、熱兩用空調,冬天和夏天均可使用。冷、熱空調“類似”制冷機,但能做更多的事情。由于我們的房間只安裝了控制制冷的設備,所以它們只限于同新機器的制冷部分打交道。新機器的接口已得到了擴展,但現有的系統并不知道除原始接口以外的任何東西。
  熟悉了等價與類似的區別后,再進行替換時就會有把握得多。盡管大多數時候“純替換”已經足夠,但您會發現在某些情況下,仍然有明顯的理由需要在衍生類的基礎上增添新功能。通過前面對這兩種情況的討論,相信大家已心中有數該如何做。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 右玉县| 房产| 屯昌县| 紫云| 平塘县| 墨玉县| 桑日县| 东方市| 香港 | 车致| 吉水县| 湘潭市| 富裕县| 芜湖县| 宁陵县| 栾川县| 彭山县| 五指山市| 永春县| 宽城| 东乌| 武义县| 织金县| 天台县| 婺源县| 宾川县| 噶尔县| 印江| 松潘县| 当雄县| 红原县| 商水县| 济阳县| 武平县| 云和县| 隆安县| 莲花县| 瑞金市| 新宁县| 长阳| 望都县|