內部類的共性
(1)、內部類仍然是乙個獨立的類,在編譯之後內部類會被編譯成獨立的.class檔案,但是前面冠以外部類的類名和$符號 。
(2)、內部類不能用普通的方式訪問。內部類是外部類的乙個成員,因此內部類可以自由地訪問外部類的成員變數,無論是否是private的 。
(3)、內部類宣告成靜態的,就不能隨便的訪問外部類的成員變數了,此時內部類只能訪問外部類的靜態成員變數 。
摺疊編輯本段成員內部類
class outer
編譯上述**會產生兩個檔案:outer.class和outer$inner.class。
摺疊編輯本段方法內部類
把類放在方法內
class outer
class test {
public static void main(string args){
outer.inner n = new outer.inner();
在靜態方法中定義的內部類也是staticnested class,這時候不能在類前面加static關鍵字,靜態方法中的staticnested class與普通方法中的內部類的應用方式很相似,它除了可以直接訪問外部類中的static的成員變數,還可以訪問靜態方法中的區域性變數,但是,該區域性變數前必須加final修飾符。
為什麼需要內部類
典型的情況是,內部類繼承自某個類或實現某個介面,內部類的**操作建立其他外圍類的物件。所以你可以認為內部類提供了某種進入其外圍類的視窗。使用內部類最吸引人的原因是:
每個內部類都能獨立地繼承自乙個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。如果沒有內部類提供的可以繼承多個具體的或抽象的類的能力,一些設計與程式設計問題就很難解決。從這個角度看,內部類使得多重繼承的解決方案變得完整。介面解決了部分問題,而內部類有效地實現了"多重繼承"。
內部類的優點是:內部類可以訪問外部類的私有成員變數,而不需要new外部類的物件。
內部類又分為:靜態內部類、匿名內部類、區域性內部類、成員內部類。
靜態內部類的應用場景是:只可以訪問外部類的靜態成員變數和靜態成員方法。
成員內部類的應用場景是:它可以訪問它的外部類的所有成員變數和方法,不管是靜態的還是非靜態的都可以。
區域性內部類:像區域性變數一樣,不能被public, protected, private和static修飾。只能訪問方法中定義的final型別的區域性變數。
匿名內部類:匿名內部類就是沒有名字的區域性內部類,不使用關鍵字class, extends, implements, 沒有構造方法。匿名內部類隱式地繼承了乙個父類或者實現了乙個介面。匿名內部類使用得比較多,通常是作為乙個方法引數。
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...
內部類(成員內部類 靜態內部類 方法內部類)
一 成員內部類 最常見的內部類就是成員內部類,也稱作普通內部類 2 inner類中定義的test 方法可以訪問outer類中的資料,不受訪問控制符的影響。3 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即 內部類 物件名 外部類物件.new 內部類 ...
內部類 內部類的訪問 匿名內部類
內部類 將乙個類定義在另乙個類的裡面,對立面那個類就成為內部類 內建類,巢狀類 定義 當描述事物時,事物的內部還有事物,該事物用內部類來描述。因為內部事務在使用外部事物的內容。舉例子心臟 內部類的訪問規則 1內部類可以直接訪問外部類中的成員,包括私有。之所以可以直接訪問外部類的成員 因為內部類中持有...