通過這次學習j2se,發現了很多之前不知道或從來沒注意的細節,而恰恰這些細節卻是關鍵所在呢,對以後實踐有著不可替代的意義。
之前,只知道介面只是用來實現的,而在深入的了解就是一問三不知了。這讓我對這次學習更印象深刻了,就如老師說過:「學習是反覆的,不是一蹴而就的」。
多個類可以實現相同的介面,乙個類也可以實現多個介面。拿**解釋吧:
inte***ce singer
inte***ce painter
class student implements singer
public void study()
public string getname()
public void sing()
public void sleep()
}
class teacher implements singer,painter
teacher(string name )
public void teach()
public void sing()
public void sleep()
public void paint()
public void eat()
}
上面有兩個介面,乙個是singer介面,另乙個是painter介面。
存在類student、teacher,這兩個都實現了singer介面:多個類可以實現同乙個介面。
類teacher實現了singer介面和painter介面:乙個類可以實現多個介面(介面實現用implements;繼承用extends)。
對於類實現介面,必須實現介面內定義的方法,而多重實現就是講多個介面內的方法都要實現。例如student必須實現singer介面中的sing()和sleep()兩個方法,而teacher必須實現singer和painter兩個介面中的sing()、sleep()、paint()和eat()四個方法。
執行結果如下:
介面之間也是可以繼承的:
inte***ce protectable
inte***ce a extends protectable
介面繼承和類繼承是相似的,所以又說介面是一種特殊的抽象類(因為介面的方法只定義不實現)。那麼會給類實現產生什麼影響呢?
class hen implements a
public void beprotected(){}
//此方法產生混淆,編譯失敗
//public void getmoney()
public double getmoney()
}
類hen實現介面a,相當於即實現介面a,又實現介面protectable。相當於乙個類實現了多個介面,只不過這兩個介面之間存在了繼承關係,那麼類就可以直接實現乙個介面便可以間接的實現了另乙個介面。
當如果方法相同(方法名、引數個數、引數型別、返回值都相同),編譯也會成功,證明兩個介面對於這個方法都可見。但是,如果兩個方法的返回值不相同,其它都相同,那麼編譯就會出錯,因為方法產生了混淆:
public inte***ce valuable
inte***ce protectable
inte***ce a extends protectable
class hen implements a
public void beprotected(){}
//此方法產生混淆,編譯失敗
public void getmoney()
public double getmoney()
}
編譯異常:
所以實現多個介面時一定要仔細注意方法問題哦!
Dongle Java 基礎(一)之輸出
今天在跟著敲例子的時候突然發現例子上面的輸出語句有點差別,然後就都試了試,感覺有必要整理一下。其中輸出語句目前我敲過的有兩種 system.out.print i system.out.println i 那麼這兩種輸出有什麼區別呢?輸出101 200內的質數 public class testfo...
typescript基礎知識(四)介面
在我的理解中,介面是用於對一系列方法 屬性定義一些標準化的內容,在typescript中體現為對型別的標準化,使用inte ce關鍵字來定義乙個介面 屬性介面針對於物件的屬性標準化 inte ce information function person info information void,a...
C 學習筆記之四 介面
關鍵字 inte ce 介面是乙個契約。規定了一組功能。1 介面不能包含實現,只能包含各種簽名 2 介面成員預設public並且無需再顯式新增public 3 實現介面的類必須實現介面的全部成員。4 針對同一介面的不同實現類可以採用不同方法實現介面的成員。可選 訪問修飾符 public 實現不侷限於...