內部類

內部類

所謂內部類,就是定義在一個類內部的類。

引入內部類,主要有以下一些考慮:

1內部類對象能訪問它所處類的私有數據

2.內部類能夠隱藏起來不爲同一個包中的其他類訪問

3.匿名內部類可以方便的用在回調方法中,典型應用是圖形編程中的事件處理。

內部類分爲以下4種:

1. 成員內部類

2. 靜態內部類

3. 局部內部類

a) 局部內部類之中,只能訪問外部類的成員變量和final修飾的局部變量。

4. 匿名內部類:一種特殊的局部內部類

a) new + 父類/父接口的形式創建。

b) 四無二有:沒有類名、沒有class關鍵字、有繼承關係但是沒有繼承關鍵字extends、沒有構造方法、有類體。

首先說一下成員內部類:

publicclass TestMemberInner {

privateintage;

public TestMemberInner(){

A a = new A();

a.testA();

}

publicvoid test(){

A a = new A();

a.testA();

}

publicclass A{

publicvoid testA(){

System.out.println("我是成員內部類");

}

}

publicstaticvoid main(String[] args) {

TestMemberInner tmi = new TestMemberInner();

tmi.test();

// 以下用法不常用

A a = tmi.new A();

a.testA();

}

}

執行結果:

我是成員內部類

我是成員內部類

我是成員內部類

靜態內部類和成員內部類很像,只要在class A前面加上static就可以了。

下面說一下局部內部類:

publicclass TestLocalInner {

privateinti = 10;

publicvoid test(){

finalint j = 10;

class A{

publicvoid testA(){

System.out.println(i);

System.out.println("我是局部內部類");

System.out.println(j);

}

}

System.out.println(j);

A a = new A();

a.testA();

}

publicstaticvoid main(String[] args) {

new TestLocalInner().test();

}

}

執行結果:

10

10

我是局部內部類

10

說明:我們可以看到局部內部類是定義在方法中的,而且只能訪問外部類的成員變量就行程序中的i一樣,如果j前面不加final修飾也是不能訪問的。

接下來是匿名內部類:

publicclass TestAnnoInner {

publicvoid test(A a){

a.testA();

}

 

publicvoid method(){

finalint i = 10;

test(new A(){

publicvoid testA(){

System.out.println(i);

System.out.println("我是匿名內部類");

}

});

}

publicstaticvoid main(String[] args) {

new TestAnnoInner().method();

}

}

 

interface A{

publicabstractvoid testA();

}

執行結果:

10

我是匿名內部類

 

 

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