內部類 外部類區別與聯絡

2021-07-04 04:02:50 字數 1821 閱讀 5355

內部類作用主要實現功能的隱藏、減少記憶體開銷,提高程式的執行速度

內部類和外部類聯絡:內部類可以訪問外部類所有的方法和屬性,如果內部類和外部類有相同的成員方法和成員屬性,內部類的成員方法呼叫要優先於外部類即內部類的優先順序比較高(只限於類內部,在主方法內,內部類物件不能訪問外部類的成員方法和成員屬性),外部類只能訪問內部類的靜態常量或者通過建立內部類來訪問內部類的成員屬性和方法

內部類定義的靜態常量可以全域性訪問

建立內部類

第一種方式

假設a是外部類,b是內部類

a a=new a();

a.b b=a.new b();

或者用a類的匿名物件來訪問

a.b b=new a().new b();

普通類許可權

public和default

而內部類具有四種許可權

a.this.name(反射機制建立當前物件)

類優先於位元組碼檔案執行,編譯完類才生成位元組碼檔案

位元組碼檔案可以通過反射機制來改變

類中的私有屬性可以通過發射機制在類外訪問,通過反射機制改變位元組碼檔案中的東西

編譯時和執行時

反射機制工作在執行時

靜態內部類.

public class staticinner *

/}*/

static

public void practice()//靜態**塊內不能定義靜態方法

//從上看出靜態內部類可以定義普通方法和靜態方法}}

private int a;

private void method()

private static string a1;

private static void  test1()

//靜態內部類

static class inner

public static void practice()

//從上看出靜態內部類可以定義普通方法和靜態方法}}

靜態內部類建立物件

staticinner.inner inn=new staticinner.inner();

這裡可以把內部類當做外部類的乙個靜態成員

區域性內部類

定義在方法體內

定義在普通**塊內

例項如下

public class outer

public void method()

}//類的作用範圍為這個方法體內,所以物件的建立在這個類宣告以後

inner in=new inner();

//**塊中的內部類}}

//inner in=new inner();//因為在方法體之外所以報錯

//總結:區域性內部類具有普通類的功能

//內部類如果訪問它所在方法中的區域性變數是無法獲取的

//解決辦法加上final關鍵字,提高變數的可見性

//區域性內部類的物件只能在該方法體的區域性建立只能在區域性類定義的後面建立物件

}匿名內部類

出現背景

經常出現在使用其他技術時,出現介面類的情況,此時無法建立介面型別的實現

例項如下

public inte***ce fruit

public class worker

}public class test1

@override

public void grow() });

//1.匿名類沒有名字

//2.匿名類是乙個子類

//3.匿名類用它父類(介面,抽象)當名字,父介面的名字

//4.執行效率奇高

//多用在android開發中

//匿名類實現父類(介面,抽象)中的方法}}

內部類與外部類的區別

定義在其他類中的類就是內部類,內部類的外面一層就是外部類。簡單來說,內部類和呼叫這個類的方法處於同乙個類中,外部類就是和呼叫這個類的方法不在同乙個類中。拿上一節關於事件監聽的程式舉例 內部類 class frame1 extends jframe 內部類 dialogeventlistener,實現...

內部類與外部類

在乙個類體之內在定義乙個類 該情況下外面的類稱為 外部類 裡面類稱為 內部類 內部類內部類可以很方便訪問外部類的私有成員屬性,外部類可以通過內部類物件來訪問內部類的私有成員屬性。內部類物件例項化語法格式 外部類.內部類 物件名 new 外部類物件.new內部類構造方法 分為靜態內部類和非靜態內部類 ...

靜態內部類與外部類

1 外部類可以通過建立靜態內部類例項的方法來呼叫靜態內部類的非靜態屬性和方法 2 外部類可以直接通過 外部類.內部類.屬性 方法 的方式直接呼叫靜態內部類中的靜態屬性和方法 靜態內部類如果要訪問外部的成員變數或者成員方法,那麼必須是靜態的 1 靜態內部類可以直接呼叫外部類的靜態屬性和方法 2 靜態內...