1、 Mixin(混合類型):一個類出了實現它的“基本類型”之外,還可以實現這個mixin類型,以表明他提供了某些可供選擇的行爲。---用接口來定義,抽象類不能。
2、 他允許可選的功能被混合到一個類型的基本功能中。
3、 接口可以是我們構造出非層次結構的類型框架。但有些事物不能整齊的組織成一個嚴格的層次結構。 比如 歌唱家 和 作曲家。
Public interface Singer{ --- Sing(Song s);}
Public interface SongWriter{ --- compose(Song s);}
新的接口: publicinterface SSW extends Singer,SongWriter{---XXX();}
另一個做法是:寫個膨脹(bloated)的類層次,對於每一種要被支持的屬性組合,都包含一個單獨的類。如果在整個類型系統中有N個屬性,則共有2^N 種可能組合有帶提供支持---------------------組合爆炸(combinatorialexplosion)。
4、接口的作用時定義類型,但 骨架實現類 的實現類負責所有與借款單實現相關的工作。
||||
把接口和抽象類的優點結合,對於每個期望導出的重要接口都提供一個抽象的骨架實現類。 ------------------------AbstractInterface如:AbstractSet AbstractList………
4、 骨架實現類 有助於接口的實現。 實現了這個接口的類可以把對於接口方法的調用,轉發到另一個內部私有類的實例上,而這個內部私有類擴展了骨架實現類。---模擬多重繼承(包裝類模式有關係)。
骨架類實現的編寫:
研究接口,確定最爲基本的(primitive)方法,其他方法在實現的時候以他們爲基礎。這些方法殭屍骨架實現類中的抽象方法。然後必須對接口中所有其他的方法提供具體的實現。
比如 : Map.Entry 接口
Public abstract class AbstractMapEntryimplements Map.Entry{
//primitives
Public abstract Object getkey();
Pbulic abstract Object getValue();
//Entries in modifiable maps must overridethis method
Public Object setValue(Object value){
throw new UnsupportedOperationException();
}
//implements the general contract of Map.Entry.equals
Public boolean equals(Object o){
If( o == this)
Returntrue;
If(!(oinstanceof Map.Entry))
Returnfalse;
Map.Entry arg= (Map.Entry) o ;
Return eq( getKey() , arg.getKey())&&eq(getValue() , arg.getValue());
}
Private static boolean eq(Object o1 , Object o2 ){
Return(o1 == null ? o2 == null : o1.equals(o2));
}
//Implements the general contract ofMan.Entry.hashcode
Public inthashCod(){
Return
(getKey() == null ? 0: getKey().hashCode())^
(getValue() == null ?0: getValue ().hashCode());
}
}