什麼是內部類? Static Nested Class 和 Inner Class 的不一樣。

什麼是內部類? Static Nested Class Inner Class 的不一樣。
        內部類就是在一個類的內部定義的類,內部類中不能定義靜態成員(靜態成員不是對象的特
性,只是爲了找一個容身之處,因此須要放到一個類中而已,這麼一點小事,你還要把它放
到類內部的一個類中,過度了啊!提供內部類,不是爲讓你幹這種事情,無聊,不讓你幹。
我想多是既然靜態成員相似 c 語言的全局變量,而內部類一般是用於建立內部對象用的,
因此,把全局變量放在內部類中就是毫無心義的事情,既然是毫無心義的事情,就應該被
禁止), 內部類能夠直接訪問外部類中的成員變量,內部類能夠定義在外部類的方法外面,
也能夠定義在外部類的方法體中,以下所示:
編程

public class Outer
{
int out_x = 0;
public void method()
{
Inner1 inner1 = new Inner1();
public class Inner2 //在方法體內部定義的內部類
{
public method()
{
out_x = 3;
}
}
Inner2 inner2 = new Inner2();
}
public class Inner1 //在方法體外面定義的內部類
{
}
}

 


         在方法體外面定義的內部類的訪問類型能夠是 public,protecte,默認的, private 4種類型,
這就好像類中定義的成員變量有4種訪問類型同樣,它們決定這個內部類的定義對其餘類是
否可見;對於這種狀況,咱們也能夠在外面建立內部類的實例對象,建立內部類的實例對象
時,必定要先建立外部類的實例對象,而後用這個外部類的實例對象去建立內部類的實例對
象,代碼以下:
eclipse

Outer outer = new Outer();
Outer.Inner1 inner1 = outer.new Innner1();

 


        在方法內部定義的內部類前面不能有訪問類型修飾符,就好像方法中定義的局部變量同樣,
但這種內部類的前面可使用 final abstract 修飾符。這種內部類對其餘類是不可見的其
他類沒法引用這種內部類,可是這種內部類建立的實例對象能夠傳遞給其餘類訪問。這種內
部類必須是先定義,後使用,即內部類的定義代碼必須出如今使用該類以前,這與方法中的
局部變量必須先定義後使用的道理也是同樣的。這種內部類能夠訪問方法體中的局部變量,
可是,該局部變量前必須加 final 修飾符。
對於這些細節,只要在 eclipse 寫代碼試試,根據開發工具提示的各種錯誤信息就能夠立刻
瞭解到。
        在方法體內部還能夠採用以下語法來建立一種匿名內部類,即定義某一接口或類的子類的同
時,還建立了該子類的實例對象,無需爲該子類定義名稱:
工具

public class Outer
{
public void start()
{
new Thread(
new Runable(){
public void run(){};
}
).start();
}
}

 


        最後,在方法外部定義的內部類前面能夠加上 static 關鍵字,從而成爲 Static Nested Class
它再也不具備內部類的特性,全部,從狹義上講,它不是內部類。 Static Nested Class 與普通
類在運行時的行爲和功能上沒有什麼區別,只是在編程引用時的語法上有一些差異,它能夠
定義成 publicprotected、默認的、 private 等多種類型,而普通類只能定義成 public 和默
認的這兩種類型。在外面引用 Static Nested Class 類的名稱爲外部類名.內部類名。在外
面不須要建立外部類的實例對象,就能夠直接建立 Static Nested Class,例如,假設 Inner
是定義在 Outer 類中的 Static Nested Class,那麼可使用以下語句建立 Inner 類:
開發工具

Outer.Inner inner = newOuter.Inner();

 


       因爲 static Nested Class 不依賴於外部類的實例對象,因此, static Nested Class 能訪問
外部類的非 static 成員變量(不能直接訪問,須要建立外部類實例才能訪問非靜態變量)
在外部類中訪問 Static Nested Class 時,能夠直接使用 Static Nested Class 的名字,而不
須要加上外部類的名字了,在 Static Nested Class 中也能夠直接引用外部類的 static 的成員
變量,不須要加上外部類的名字。
       在靜態方法中定義的內部類也是 Static Nested Class,這時候不能在類前面加 static 關鍵字,
靜態方法中的 Static Nested Class 與普通方法中的內部類的應用方式很類似,它除了能夠
直接訪問外部類中的 static 的成員變量,還能夠訪問靜態方法中的局部變量,可是,該局部
變量前必須加 final 修飾符。
 
spa

相關文章
相關標籤/搜索