Java | 靜態嵌套類(Static Nested Class)


前言


 

定義


靜態嵌套類(Static Nested Class),是 Java 中對類的一種定義方式,是嵌套類的一個分類。

Java 編程語言允許一個類被定義在另一個類中,這樣的類就稱為嵌套類。嵌套類分為兩種:靜態的和非靜態的。用 static 關鍵字來聲明的嵌套類,就稱為靜態嵌套類

包含嵌套類的類,可稱為外圍類(Enclosing Class)或外部類(Outer Class)。靜態嵌套類不能訪問其外圍類的其他成員。靜態嵌套類作為其外部類的成員,它可聲明為 privatepublicprotected 或包私有的。

  • 提示:外部類只能聲明為 public 或包私有的。

 

概述


與類的方法和變量一樣,靜態嵌套類與其外部類相關聯。與類的靜態方法一樣,靜態嵌套類不能直接引用其外圍類中定義的實例變量或方法。

 1 /**
 2  * 定義一個公共的 OuterClass 類。
 3  */
 4 public class OuterClass {
 5     private final String name;
 6  
 7     public static void main(String[] args) {
 8         String name = "Java";
 9         OuterClass outerObject = new OuterClass(name);
10         OuterClass.StaticNestedClass nestedObject =
11                 new OuterClass.StaticNestedClass(name);
12         System.out.println(outerObject.getName());
13         System.out.println(nestedObject.getName());
14     }
15  
16     /**
17      * 定義一個 OuterClass 類的構造方法。
18      *
19      * @param name 表示一個名稱字符串。
20      */
21     public OuterClass(String name) {
22         this.name = name;
23     }
24  
25     public String getName() {
26         return name;
27     }
28  
29     /**
30      * 定義一個包私有的 StaticNestedClass 類。
31      */
32     static class StaticNestedClass {
33         private final String name;
34  
35         /**
36          * 定義一個 StaticNestedClass 類的構造方法。
37          *
38          * @param name 表示一個名稱字符串。
39          */
40         public StaticNestedClass(String name) {
41             this.name = name + " (in the nested object)";
42         }
43  
44         public String getName() {
45             return name;
46         }
47     }
48 }
49 /* 輸出結果:
50 Java
51 Java (in the nested object)
52  
53  */


在上述示例中,若 StaticNestedClass 類的實例在創建時需要使用 OuterClass 類的成員變量,則可向其構造方法傳遞該變量的值。

  • 提示:靜態嵌套類在與其外部類或其他類的實例成員進行交互的時候,就像任何其他頂層類(Top-Level Class)一樣。實際上,靜態嵌套類在行為上就是一個頂層類,為了便於打包,它被嵌套在了另一個頂層類中。

請用外圍類名來訪問靜態嵌套類,例如,在為靜態嵌套類創建對象時,請使用以下語法:

1         OuterClass.StaticNestedClass nestedObject =
2                 new OuterClass.StaticNestedClass();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM