天天看點

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

本節書摘來華章計算機《資料結構與抽象:java語言描述(原書第4版)》一書中的第1章 ,第1節,[美]弗蘭克m.卡拉諾(frank m. carrano) 蒂莫西m.亨利(timothy m. henry) 著 羅得島大學  新英格蘭理工學院 辛運帏 饒一梅 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

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

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

然後,類必須定義接口中聲明的每個方法。在本例中,類circle必須至少實作方法getperimeter和getarea。

如果寫一個實作measurable的類square,這個類的開頭應該是這樣的:

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

且它至少應該定義方法getperimeter和getarea。顯然,這兩個方法的定義不同于它們在類circle中的定義。

圖p-3展示了包含measurable、circle、square以及它們的客戶的檔案。

《資料結構與抽象:Java語言描述(原書第4版)》一P.3.2 實作一個接口
注:寫接口是類的設計人員向其他程式員說明方法的一種方式。實作接口是程式員確定類已經定義了某些方法的一種方式。 注:不同的類或許以不同的方式實作同一個接口。例如,可以有多個類都實作接口measurable,且為方法getperimeter和getarea寫各自的版本。 示例。想象用于圓、球體和圓柱體等不同幾何形狀的類。其中的每一個幾何體都有一個半徑。我們可以定義下列接口,讓類來實作它:
《資料結構與抽象:Java語言描述(原書第4版)》一P.3.2 實作一個接口

接口能知道已經定義了半徑,是以為這個量聲明set方法和get方法。但是,不能為半徑聲明資料域。實作接口的類來做這件事。

實作這個接口的類circle如下所示:

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

類定義了一個私有資料域radius,且實作了接口circular中聲明的方法setradius和getradius。接口中不能含有像radius這樣的資料域,因為它是私有的。

注:類中定義的方法數可以超出它實作的接口中聲明的方法數。例如,類circle定義了方法getarea,它沒有包含在接口circular中。

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

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

要想記住這個次序,隻需記住保留字extends和implements在類頭中以字母序出現即可。

實作多個接口的類必須定義接口中聲明的每個方法。如果在類實作的多個接口中出現了相同的方法頭,則類中隻需定義一個即可。

不能從多個基類派生一個類。這個限制避免了實作繼承時可能出現的沖突。但java接口含有方法的規格說明,但不實作它們。類可以實作這些規格說明,而不管它們出現在一個接口中還是出現在多個接口中。通過允許類來實作多個接口這種機制,java既實作了多重繼承,又去掉了它可能引起的混亂。

自測題5 寫一個java接口,它定義學生類并聲明其中的方法。

自測題6 定義一個類,規範實作前一個問題中你寫的接口。要包含資料域、構造方法及至少一個方法的定義。