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


《數據結構與抽象:Java語言描述(原書第4版)》一P.3.3 接口作為數據類型

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

P.3.3 接口作為數據類型

當聲明變量、數據域或方法的參數時,可以將Java接口用作數據類型。例如,前麵的方法giveLastNameTo有一個類型為NameInterface的參數:
image

傳送給這個方法的任何實參,必須是實現NameInterface的類的對象。
為什麼不將aName的類型聲明為一個類,如Name呢?我們想讓接口獨立於實現它的類,因為實現一個接口的類可以有多個。使用NameInterface作為參數的類型,能保證方法的實參將具有NameInterface中聲明的所有方法。通常,如果數據類型是接口,你能保證方法的參數有特定的方法,即接口中聲明的那些方法。另一方麵,參數隻有那些方法。
如果一個類C的頭不含有implements NameInterface,但仍實現了接口中的方法,又會如何呢?你不能將C的實例做為參數傳送給giveLastNameTo方法。

注:通過將接口用作變量的類型,可以說明,這個變量可以引用一個對象,該對象有一組方法且僅有這組方法。
注:接口類型是引用類型。
如下的變量聲明

image

使得myName成為一個引用變量。現在myName可以指向實現NameInterface的任意一個類的任意對象。故如果Name實現了NameInterface,且有
image

則myName.getFirst()返回指向字符串"Coco"的引用。如果類AnotherName也實現了NameInterface,且隨後寫了語句
image

則myName.getFirst()返回指向字符串"April"的引用。

自測題7 為能利用NameInterface,需要對問題5中寫的接口及實現它的類Student做哪些修改?

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

  上一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一P.3.4 派生一個接口
  下一篇:go  為什麼阿裏巴巴的企業Logo是它?