Java複習筆記(7)——接口和內部類

接口

1、在Java程序設計語言中,接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統一格式進行定義。

2、接口中的所有方法自動地屬於public

3、接口絕對不能含有實例域,也不能在接口中實現方法。提供實例域和方法實現的任務應該由實現接口的那個類來完成。

4、使用implements關鍵字使類實現一個接口。

5、接口不是類,尤其不能使用new運算符實例化一個接口:

x = new Comparable(...) // ERROR

6、然而,儘管不能構造接口的對象,卻能聲明接口的變量:

Comparable x; // OK

7、可以使用instanceof檢查一個對象是否實現了某個接口。

8、類似於建立類的繼承關係,接口也可以被擴展。允許存在多條從具有較高通用性的接口到較高專用性的接口的鏈:

public interface Movable {

void move(double x, double y);

}

public interface Powered extends Moveable {

double milesPerGallon();

}

9、在接口中可以包含常量,接口中的域會被自動設置爲public static final

public interface Powered extends Moveable {

double milesPerGallon();

double SPEED_LIMIT = 95; // a public static final constant.

}

10、每個類只能有一個超類,但是可以實現多個接口。

11、接口可以提供多重集成的大多數好處,同時還能避免多重集成的複雜性和低效性。

12、Java默認的克隆操作時淺拷貝,它並沒有克隆包含在對象中的內部對象。

13、進行對象克隆操作時,需要作出下列判斷:

① 默認的clone方法能否滿足需求。

② 默認的clone方法是否能夠通過調用可變子對象的clone得到修補。

③ 是否不應該使用clone

如果要選擇①和②,類必須:

① 實現Cloneable接口。

② 使用public訪問修飾符重新定義clone方法。

14、Cloneable是一個標記接口(tagging interface),接口中不包含方法,使用它的唯一目的是可以用instanceof進行類型檢查。

15、所有的數組類型均包含一個clone方法,這個方法被設爲public,而不是protected。可以利用這個方法創建一個包含所有數據元素的拷貝的新數組:

int[] luckyNumbers = {2, 3, 5, 7, 11, 13};

int[] cloned = luckNumbers.clone();

cloned[5] = 12; // doesnt change luckyNumbers[5];


內部類

1、內部類(inner class)是定義在另一個類中的類。

2、定義內部類主要基於以下三個原因:

① 內部類方法可以訪問該類定義所在的作用域中的數據,包括私有數據

② 內部類可以對同一個包中的其他類隱藏起來。

③ 當想要定義一個回調函數且不想編寫大量的代碼時,使用匿名內部類比較便捷。

3、內部類既可以訪問自身的數據域,也可以訪問創建它的外圍類的對象的數據域。

4、內部類中可以使用外圍類的引用,表達式OuterClass.this表示外圍類的引用。

5、在外圍類的作用域之外,可以這樣引用內部類:OuterClass.InnerClass

new OuterClass().new InnerClass();

6、可以在方法內部定義局部類,局部類不能用publicprivate訪問說明符進行聲明。它的作用域被限定在這個局部類的塊中。

7、局部類可以訪問final修飾的局部變量。

8、定義匿名內部類:

new SuperType(construction parameters) {

inner class and data;

}

9、匿名類不能有構造器,取而代之的是,將構造器參數傳遞給超類構造器。尤其是內部類實現接口的時候,不能有任何構造參數:

new InterfaceType() {

methods and data;

}

10、雙括號初始化:

new ArrayList<String>() {

{

add(Harry);

add(Tony);

}

11、有時候,使用內部類知識爲了把一個類隱藏在另外一個類的內部,並不需要內部來引用外圍類對象。爲此,可以將內部類聲明爲static,一遍取消產生的引用,這樣就定義了一個靜態內部類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章