Inner Class(內部類)定義在類中的類。 (通常是JAVA的說法)html
Nested Class(嵌套類)是靜態(static)內部類。(通常是C++的說法)
靜態內部類:1 建立一個static內部類的對象,不須要一個外部類對象2 不能從一個static內部類的一個對象訪問一個外部類對象編程
Java內部類與C++嵌套類最大的不一樣就在因而否有指向外部的引用上。this
內部類:就是在一個類的內部定義的類,spa
A.非靜態內部類中不能定義靜態成員(靜態對象是默認加載,那麼靜態內部類應該先於外部類被加載到內存中)htm
當內部類中若是有靜態成員時,該內部類也必須是靜態的。而靜態內部類只能訪問外部類中的靜態成員。 會出現兩種狀況:對象
1,內部類靜態,可是方法沒靜態。該方法須要被對象調用執行。blog
Outer.Inner in = new Outer.Inner();//產生了一個靜態內部類對象。接口
in.show();內存
2,內部類靜態,並且方法也是靜態的。靜態內部類隨着對象的加載就已經存在了,靜態方法隨着內部類的加載也存在了。這時是不須要對象的。class
Outer1.Inner.show();
B.內部類能夠直接訪問外部類中的成員變量
非靜態的內部類之因此能夠直接訪問外部類中的成員,那是由於內部類中都持有一個外部類對象引用:外部類名.this.變量名
靜態內部類之因此能夠直接訪問外部類中的靜態成員,其實持有的是外部類名。
C.內部類能夠定義在外部類的方法外面,也能夠定義在外部類的方法體中,以下所示:
在方法體外面定義的內部類的訪問類型能夠是public,protected,默認的,private等4種類型,它們決定這個內部類的定義對其餘類是否可見;對於這種狀況,咱們也能夠在外面建立內部類的實例對象,必定要先建立外部類的實例對象,而後用這個外部類的實例對象去建立內部類的實例對象,代碼以下:
Outer outer = new Outer();
Outer.Inner1 inner1 = outer.new Innner1();
在方法內部定義的內部類前面不能有訪問類型修飾符,但前面可使用final或abstract修飾符。這種內部類對其餘類是不可見的其餘類沒法引用這種內部類,可是這種內部類建立的實例對象能夠傳遞給其餘類訪問。這種內部類必須是先定義,後使用,即內部類的定義代碼必須出如今使用該類以前,這與方法中的局部變量必須先定義後使用的道理也是同樣的。這種內部類能夠訪問方法體中的局部變量,可是,該局部變量前必須加final修飾符。
在方法體內部還能夠採用以下語法來建立一種匿名內部類,沒有名字的內部類,即定義某一接口或類的子類的同時,還建立了該子類的實例對象,無需爲該子類定義名稱:
public class Outer{
public void start(){
new Thread(
new Runable(){
public void run(){};
}).start();
}
}
Static Nested Class,它再也不具備內部類的特性,從狹義上講,它不是內部類。Static Nested Class與普通類在運行時的行爲和功能上沒有什麼區別,只是在編程引用時的語法上有一些差異:
1.它能夠定義成public、protected、默認的、private等多種類型,而普通類只能定義成public和默認的這兩種類型。
2.在外面引用Static Nested Class類的名稱爲「外部類名.內部類名」。
3.在外面不須要建立外部類的實例對象,就能夠直接建立Static Nested Class,例如,假設Inner是定義在Outer類中的Static Nested Class,那麼可使用以下語句建立Inner類:
Outer.Inner inner = new Outer.Inner();
4.因爲static Nested Class不依賴於外部類的實例對象,因此,static Nested Class能訪問外部類的非static成員變量。
5.當在外部類中訪問Static Nested Class時,能夠直接使用Static Nested Class的名字,而不須要加上外部類的名字了,在Static Nested Class中也能夠直接引用外部類的static的成員變量,不須要加上外部類的名字。
在靜態方法中定義的內部類也是Static Nested Class,這時候不能在類前面加static關鍵字,靜態方法中的Static Nested Class與普通方法中的內部類的應用方式很類似,它除了能夠直接訪問外部類中的static的成員變量,還能夠訪問靜態方法中的局部變量,可是,該局部變量前必須加final修飾符。
備註:內部類的整體方面的特色:兩個地方能夠定義,能夠訪問外部類的成員變量,不能定義靜態成員,這是大的特色。而後再說一些細節方面的知識,例如,幾種定義方式的語法區別,靜態內部類,以及匿名內部類。
轉自:http://blog.sina.com.cn/s/blog_105817120102vyyv.html
相關介紹:http://www.cnblogs.com/wangzhongqiu/p/6574019.html
http://www.cnblogs.com/wangzhongqiu/p/6574110.html