Java內部類的分類

2021-08-05 18:28:33 字數 2485 閱讀 5272

內部類按照使用上可以分為四種情形:

類級:成員式,有 static 修飾

物件級:成員式,普通,無 static 修飾

本地內部類:區域性式

匿名級:區域性式

內部類可以作為外部類的成員,示例如下:

public class outer1

}public void testtheinner()

}成員式內部類如同外部類的乙個普通成員。

成員式內部類的基本規則:

可以有各種修飾符,可以用 4 種許可權、static、final、abstract 定義(這點和普通 的類是不同的);

若有 static 限定,就為類級,否則為物件級。類級可以通過外部類直接訪問;物件級需要先生成外部的物件後才能訪問。

內外部類不能同名

非靜態內部類中不能宣告任何 static 成員

內部類可以互相呼叫,如下:

class a

class c {}}

成員式內部類的訪問

內部類的物件以屬性的方式記錄其所依賴的外層類物件的引用,因而可以找到該外層類物件並訪問其成員 。 該屬性是系統自動為非static的內部類新增的,名稱約定為「外層類名.this」。

在其它場合則必須先獲得外部類的物件,再由外部類物件加「.new」操作符呼叫內部類的構造方法建立內部類的物件,此時依賴關係的雙方也可以明確。這樣要求是因為:外部類的static 方法中不存在當前物件,或者其它無關類中方法的當前物件型別不符合要求。

(1)在另乙個外部類中使用非靜態內部類中定義的方法時,要先建立外部類的物件,再建立與外部類相關的內部類的物件,再呼叫內部類的方法,如下所示:

class outer2 }}

class testinner

}(2)static 內部類相當於其外部類的 static 成分,它的物件與外部類物件間不存在依賴關係,因此可直接建立。示例如下:

class outer2 }}

public class test

}程式執行結果為:

size=1

(3)由於內部類可以直接訪問其外部類的成分,因此當內部類與其外部類中存在同名屬性或方法時,也將導致命名衝突。所以在多層呼叫時要指明,如下所示:

public class outer3}}

本地類(local class)是定義在**塊中的類。它們只在定義它們的**塊中是可見的。

本地類有幾個重要特性:

僅在定義了它們的**塊中是可見的;

可以使用定義它們的**塊中的任何本地 final 變數;

本地類不可以是 static 的,裡邊也不能定義 static 成員;

本地類不可以用 public、private、protected 修飾,只能使用預設的;

本地類可以是 abstract 的。

示例如下:

public final class outter

}new inner().innertest();

}public static void main(string args)

}匿名內部類是本地內部類的一種特殊形式,也就是沒有變數名指向這個類例項,而且具體的類實現會寫在這個內部類裡面。把上面的例子改造一下,如下所示:

public final class test

}.testa();

}public static void main(string args)

}注意:匿名內部類是在乙個語句裡面,所以後面需要加「;」。

匿名類的規則:

匿名類沒有構造方法;

匿名類不能定義靜態的成員;

匿名類不能用 4 種許可權、static、final、abstract 修飾;

只可以建立乙個匿名類例項

再次示例:

public class outter };}

public static void main(string args)

}總結一下,內部類有如下特點:

類名稱只能用在定義過的範圍中,除非用在限定的名稱中。內部類的名稱必須與所巢狀的類不同。

內部類可以被定義在方法中。這條規則較簡單,它支配到所巢狀類方法的變數的訪問。任何變數,不論是本地變數還是正式引數,如果變數被標記為final,那麼,就可以被內部類中的方法訪問。

內部類可以使用所巢狀類的類變數和例項變數以及所巢狀的塊中的本地變數。

內部類可以被定義為 abstract。

只有內部類可以被宣告為 private 或 protected,以便防護它們不受來自外部類的訪問。訪問保護不阻止內部類使用其它類的任何成員,只要乙個類巢狀另乙個。

乙個內部類可以作為乙個介面,由另乙個內部類實現。

被自動地宣告為 static 的內部類成為頂層類。這些內部類失去了在本地範圍和其它內部類中使用資料或變數的能力。

內部類不能宣告任何 static 成員;只有頂層類可以宣告 static 成員。因此,乙個需求 static 成員的內部類必須使用來自頂層類的成員。

java內部類的分類和建立

class circle class draw class out public class demo 靜態內部類只能訪問其外部類的靜態成員變數,而且可以直接new出內部類物件。class out public void outprint public class demo 私有內部類是不能在外部用...

內部類的分類

靜態內部類,非靜態內部類 非靜態內部類 public class inclass class outer class inner 要點 1.非靜態的內部類必須寄存在乙個外部類的物件裡,因此,如果有乙個非靜態內部類物件那麼一定存在乙個對應的外部類物件,非靜態內部類物件單獨屬於外部類的某個物件 2.非靜...

內部類的分類

成員內部類 區域性內部類 靜態內部類 匿名內部類 內部類可以直接訪問外部類的變數,方法,包括私有。外部類要訪問內部類的變數或者方法需要建立內部類的物件。成員內部類 內部類的位置處在外部類的成員變數的位置。class outter 內部類的例項化 外部類名.內部類名 物件名 new 外部類名.new ...