「java入門第1四半期」のオブジェクト向け静的内部クラスと非静的内部クラスの違い

2231 ワード

内部章では、「嬉陽」さんのアドバイスに感謝します.静的内部クラスを使用します.ここでは静的内部クラスの使用について簡単に述べる.
package com.devin;

public class MyMain{
    private static String name = "woobo";
    private String num = "X001";
 
    //         public,protected,private  
    static class Person {
        //                     
        private String address = "China";

        private static String x = "as";
        public String mail = "http://blog.csdn.net/qq_32059827";//        

        public void display() {
            // System.out.println(num);//               

            //                   (             )
            System.out.println(name);//               

            //                  (           )
            System.out.println("Inner " + address);//         。
        }
    }

    public void printInfo() {
        Person person = new Person();

        //               :        
        person.display();

        // System.out.println(mail);//    
        // System.out.println(address);//    
        System.out.println(person.address);//             

        System.out.println(Person.x);//              :   .    
        System.out.println(person.mail);//             
    }

    public static void main(String[] args) {
        MyMain staticTest = new MyMain();
        staticTest.printInfo();
    }
}

1.クラスをネストしたオブジェクト.その周辺クラスのオブジェクトは必要ありません.すなわち、外部クラスインスタンスに依存せずにインスタンス化することができる.
2.ネストされたクラスのオブジェクトから非静的な周辺クラスオブジェクトにアクセスできません.これは、Java構文で「静的メソッドでは非静的メンバーに直接アクセスできない」ことによって定義されます.
3.外部クラスが内部クラスにアクセスするメンバーは特別で、直接アクセスすることはできないが、静的ネスト内のすべてのメンバーとメソッドがデフォルトで静的であるため、内部クラスのインスタンスでアクセスすることができる.また、内部静的クラスPersonはクラスStaticTestの範囲内でしか見ることができず、他のクラスで参照または初期化すると、いずれもエラーである.4 . 静的内部クラスには静的メンバーがあり、静的内部クラスではなく静的メンバーがあります.  5. 静的内部クラスの非静的メンバーは、外部クラスの静的変数にアクセスでき、外部クラスの非静的変数にアクセスできない.
6 . 非静的内部クラスの非静的メンバーは、外部クラスの非静的変数にアクセスできます.
静的内部クラスを生成するには、外部クラスメンバーは必要ありません.これは静的内部クラスとメンバー内部クラスの違いです.静的内部クラスのオブジェクトは直接生成することができる:Outer.Inner in = new Outer.Inner();外部クラスオブジェクトを生成することによって生成する必要はありません.これにより、実際には静的内部クラスがトップクラスになります(通常、インタフェースの内部にコードを配置することはできませんが、ネストされたクラスはstaticであるため、インタフェースの一部として使用できます.ネストされたクラスをインタフェースのネーミングスペースに配置するだけで、インタフェースのルールに反しません).