Javaにおける内部クラス、静的内部クラス、列挙クラス

5146 ワード

一、内部クラスが別のクラスで定義されたクラス内部クラスの役割1、内部クラスはより良いパッケージを提供する.外部クラスのみが直接アクセスでき、同じパッケージ内の他のクラスは直接アクセスできません.2、内部クラスは外部クラスのプライベート属性に直接アクセスでき、内部クラスはその外部クラスメンバーとして扱われる.外部クラスが内部クラスの内部プロパティにアクセスできない場合.内部クラスの使用状況:内部クラスはよりよくカプセル化され、外部クラスの属性にアクセスしやすいためです.したがって、通常、内部クラスは、外部クラスがサービスを提供する場合にのみ優先的に使用される.内部クラス分類:メンバー内部クラス匿名内部クラスローカル内部クラス(めったに使用されない)二、静的内部クラス静的内部クラス静的メンバー属性しか操作できないため、何度作成しても複数の静的クラスインスタンスは同一ではないが、その操作の変数は共有される(1は2に変わる)!
public class StudyStatic {

    private static int staticVar;
    private static InternalStaticClass innerClass = new InternalStaticClass();
    private static InternalStaticClass innerClass2 = new InternalStaticClass();

    public static void main(String[] args) {

        System.out.println(innerClass.hashCode());
        System.out.println(innerClass2.hashCode());
    }

    protected static class InternalStaticClass{

        public InternalStaticClass(){

            staticVar++;
            System.out.println(staticVar);
        }
    }
}

コード結果:
1
2
366712642
1829164700

三、列挙クラスenum列挙タイプ定義はクラス定義と似ており、enumタイプ自体はクラスに相当するが、比較的特殊であり、このクラスのいくつかのインスタンスを提供することに相当し、もちろんenumタイプはインスタンス化できないが、すでに存在する列挙値を修正することができる.
public class TestEnum {

    public static void main(String[] args) {

        for(int i=0;iout.println(MyEnum.values()[i].getKey()+":"+
                    MyEnum.values()[i].getValue());
        }
        MyEnum.Enum1.setKey(4);
        System.out.println(MyEnum.Enum1.getKey()+":"+MyEnum.Enum1.getValue());
    }

    public enum MyEnum{

        //      ,            
        Enum1(1,"One"),Enum2(2,"Two"),Enum3(3,"Three");

        //         
        private int key;
        private String value;

        //    
        MyEnum(int key,String value){
            this.setKey(key);
            this.setValue(value);
        }
        public int getKey() {
            return key;
        }
        public void setKey(int key) {
            this.key = key;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }
}

実行結果:
1:One
2:Two
3:Three
4:One