閱讀253 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《數據結構與抽象:Java語言描述(原書第4版)》一P.3.2 實現一個接口

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,第1節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

P.3.2 實現一個接口

實現接口的任何類,必須在類定義的開頭使用implements子句進行說明。例如,如果類Circle實現了接口Measurable,它的開頭就是下麵這種形式:
image

然後,類必須定義接口中聲明的每個方法。在本例中,類Circle必須至少實現方法getPerimeter和getArea。
如果寫一個實現Measurable的類Square,這個類的開頭應該是這樣的:
image

且它至少應該定義方法getPerimeter和getArea。顯然,這兩個方法的定義不同於它們在類Circle中的定義。
圖P-3展示了包含Measurable、Circle、Square以及它們的客戶的文件。

image

注:寫接口是類的設計人員向其他程序員說明方法的一種方式。實現接口是程序員確保類已經定義了某些方法的一種方式。
注:不同的類或許以不同的方式實現同一個接口。例如,可以有多個類都實現接口Measurable,且為方法getPerimeter和getArea寫各自的版本。
示例。想象用於圓、球體和圓柱體等不同幾何形狀的類。其中的每一個幾何體都有一個半徑。我們可以定義下列接口,讓類來實現它:

image

接口能知道已經定義了半徑,所以為這個量聲明set方法和get方法。但是,不能為半徑聲明數據域。實現接口的類來做這件事。
實現這個接口的類Circle如下所示:
image

類定義了一個私有數據域radius,且實現了接口Circular中聲明的方法setRadius和getRadius。接口中不能含有像radius這樣的數據域,因為它是私有的。

注:類中定義的方法數可以超出它實現的接口中聲明的方法數。例如,類Circle定義了方法getArea,它沒有包含在接口Circular中。

多個接口。類可以實現多個接口。如果想這樣做,隻需列出所有的接口名,並以逗號分隔即可。如果類是從另一個類派生而來的,則implements子句永遠在extends子句的後麵。所以,可以寫
image

要想記住這個次序,隻需記住保留字extends和implements在類頭中以字母序出現即可。
實現多個接口的類必須定義接口中聲明的每個方法。如果在類實現的多個接口中出現了相同的方法頭,則類中隻需定義一個即可。
不能從多個基類派生一個類。這個限製避免了實現繼承時可能出現的衝突。但Java接口含有方法的規格說明,但不實現它們。類可以實現這些規格說明,而不管它們出現在一個接口中還是出現在多個接口中。通過允許類來實現多個接口這種機製,Java既實現了多重繼承,又去掉了它可能引起的混亂。

自測題5 寫一個Java接口,它定義學生類並聲明其中的方法。
自測題6 定義一個類,規範實現前一個問題中你寫的接口。要包含數據域、構造方法及至少一個方法的定義。

最後更新:2017-06-26 14:32:11

  上一篇:go  為什麼阿裏巴巴的企業Logo是它?
  下一篇:go  阿裏首次公開量子通信技術: “走進了一個無人區”