(十四)內部類

2021-07-24 00:16:02 字數 1948 閱讀 8631

特點

內部類可以訪問外部類的所有作用域。

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

當外部類的物件建立乙個內部類物件時,此內部類物件必定會捕捉乙個指向外部類物件的引用。

內部類的物件只能在與外部類的物件相關聯的情況下才能被建立(內部類是非static時),即必須存在外部類的物件。

在外部類的非靜態方法以外的地方,需要用outer.inner類指明物件型別。

在外部類的非靜態方法內,直接用inner類指明物件型別。

在外部類的靜態方法內和其他類中,必須先例項化乙個外部類物件,然後使用outer.inner in = out.new inner();類似的格式才能例項化乙個內部類物件。

如果內部類是巢狀類(static類),則不需要對外部類的物件的引用,即不需要先例項化外部類物件。

public

class

outer

//外部類非靜態方法中直接inner in = new inner()就可以例項化內部類物件

//外部類非靜態方法以外的地方,使用outer.inner in = new outer.inner();

public

void

print()

//返回乙個指向內部類物件的引用

public inner getinner(int i1,int

i2)

private

class

inner

public

void

print()

}}

當內部類是private時,在其他類中通過out.new inner()也無法建立內部類的物件。如下:

public

class

test

}

在方法中定義的類,不能設定為public或private,因為該類對方法以外的範圍完全是隱藏的。區域性類可以訪問它的外部類的作用域。

只要乙個類是抽象的或是乙個介面,那麼其子類中的方法都可以使用匿名內部類來實現

抽象類的方法實現

abstract

class

person

public

class

demo

};p.eat();

}}

在介面上使用匿名內部類

inte***ce

person

public

class

demo

};p.eat();

}}

由上面的例子可以看出,只要乙個類是抽象的或是乙個介面,那麼其子類中的方法都可以使用匿名內部類來實現

最常用的情況就是在多執行緒的實現上,因為要實現多執行緒必須繼承thread類或是繼承runnable介面

thread類的匿名內部類實現

public

class

demo }};

t.start();

}}

runnable介面的匿名內部類實現

public

class

demo }};

thread t = new

thread(r);

t.start();

}}

非靜態內部類是附屬在外部類物件上的,需要先例項化乙個外部類的物件,通過外部類物件才能例項化非靜態內部類;而靜態內部類可以看做是直接附屬在外部類上的,這個靜態代表附屬體是外部類,而不是外部類例項;

public

class

outer

public

static

class

inner

}}

內部類 成員內部類 區域性內部類 匿名內部類

public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...

內部類(成員內部類 靜態內部類 方法內部類)

一 成員內部類 最常見的內部類就是成員內部類,也稱作普通內部類 2 inner類中定義的test 方法可以訪問outer類中的資料,不受訪問控制符的影響。3 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即 內部類 物件名 外部類物件.new 內部類 ...

Java物件導向筆記 十四 內部類

一 內部類訪問規則 內部類可以直接訪問外部類中的成員,包括私有的。之所以可以直接訪問外部類中的成員,是因為內部類中持有乙個外部類的引用即 外部類名.this 外部類要訪問內部類,必須建立內部類物件 二 訪問格式 當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中直接建立內部類物件 格式...