《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口
本節(jié)書摘來華章計(jì)算機(jī)《數(shù)據(jù)結(jié)構(gòu)與抽象:Java語(yǔ)言描述(原書第4版)》一書中的第1章 ,第1節(jié),[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學(xué) 新英格蘭理工學(xué)院 辛運(yùn)幃 饒一梅 譯 更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計(jì)算機(jī)”公眾號(hào)查看。
P.3.2 實(shí)現(xiàn)一個(gè)接口
實(shí)現(xiàn)接口的任何類,必須在類定義的開頭使用implements子句進(jìn)行說明。例如,如果類Circle實(shí)現(xiàn)了接口Measurable,它的開頭就是下面這種形式:
然后,類必須定義接口中聲明的每個(gè)方法。在本例中,類Circle必須至少實(shí)現(xiàn)方法getPerimeter和getArea。
如果寫一個(gè)實(shí)現(xiàn)Measurable的類Square,這個(gè)類的開頭應(yīng)該是這樣的:
且它至少應(yīng)該定義方法getPerimeter和getArea。顯然,這兩個(gè)方法的定義不同于它們?cè)陬怌ircle中的定義。
圖P-3展示了包含Measurable、Circle、Square以及它們的客戶的文件。
注:寫接口是類的設(shè)計(jì)人員向其他程序員說明方法的一種方式。實(shí)現(xiàn)接口是程序員確保類已經(jīng)定義了某些方法的一種方式。
注:不同的類或許以不同的方式實(shí)現(xiàn)同一個(gè)接口。例如,可以有多個(gè)類都實(shí)現(xiàn)接口Measurable,且為方法getPerimeter和getArea寫各自的版本。
示例。想象用于圓、球體和圓柱體等不同幾何形狀的類。其中的每一個(gè)幾何體都有一個(gè)半徑。我們可以定義下列接口,讓類來實(shí)現(xiàn)它:
接口能知道已經(jīng)定義了半徑,所以為這個(gè)量聲明set方法和get方法。但是,不能為半徑聲明數(shù)據(jù)域。實(shí)現(xiàn)接口的類來做這件事。
實(shí)現(xiàn)這個(gè)接口的類Circle如下所示:
類定義了一個(gè)私有數(shù)據(jù)域radius,且實(shí)現(xiàn)了接口Circular中聲明的方法setRadius和getRadius。接口中不能含有像radius這樣的數(shù)據(jù)域,因?yàn)樗撬接械摹?/p>
注:類中定義的方法數(shù)可以超出它實(shí)現(xiàn)的接口中聲明的方法數(shù)。例如,類Circle定義了方法getArea,它沒有包含在接口Circular中。
多個(gè)接口。類可以實(shí)現(xiàn)多個(gè)接口。如果想這樣做,只需列出所有的接口名,并以逗號(hào)分隔即可。如果類是從另一個(gè)類派生而來的,則implements子句永遠(yuǎn)在extends子句的后面。所以,可以寫
要想記住這個(gè)次序,只需記住保留字extends和implements在類頭中以字母序出現(xiàn)即可。
實(shí)現(xiàn)多個(gè)接口的類必須定義接口中聲明的每個(gè)方法。如果在類實(shí)現(xiàn)的多個(gè)接口中出現(xiàn)了相同的方法頭,則類中只需定義一個(gè)即可。
不能從多個(gè)基類派生一個(gè)類。這個(gè)限制避免了實(shí)現(xiàn)繼承時(shí)可能出現(xiàn)的沖突。但Java接口含有方法的規(guī)格說明,但不實(shí)現(xiàn)它們。類可以實(shí)現(xiàn)這些規(guī)格說明,而不管它們出現(xiàn)在一個(gè)接口中還是出現(xiàn)在多個(gè)接口中。通過允許類來實(shí)現(xiàn)多個(gè)接口這種機(jī)制,Java既實(shí)現(xiàn)了多重繼承,又去掉了它可能引起的混亂。
自測(cè)題5 寫一個(gè)Java接口,它定義學(xué)生類并聲明其中的方法。
自測(cè)題6 定義一個(gè)類,規(guī)范實(shí)現(xiàn)前一個(gè)問題中你寫的接口。要包含數(shù)據(jù)域、構(gòu)造方法及至少一個(gè)方法的定義。
總結(jié)
以上是生活随笔為你收集整理的《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解javascript中的回调函数(c
- 下一篇: PAI分布式机器学习平台编程模型演进之路