210804カウントTIL


✔ Learned


Innerクラスと静的ネストクラス

  • Innerクラスと静的ネストクラスがあります.
  • クラスの内部では、非静的宣言クラスを内部クラスと呼び、静的宣言クラスを静的ネストクラスと呼ぶ.
  • InnerClass
  • class OuterClass {
        ...
        class InnerClass {
            ...
        }
    }

    どうして勉強しますか。


    どちらを使うか悩む.
    実際にLinkedListを実装するコードがノードを静的ネストクラスとして宣言するため、LinkedListが実装される.

    この二つにはどんな違いがありますか。


  • 静的か非静的かを区別する
  • の重要な違いの1つは、内部クラスが外部クラスのメンバー変数にアクセスでき、静的ネストクラスが外部クラスの非静的メンバー変数にアクセスできないことです.
  • が生成されると、内部クラスには外部クラスのインスタンスが存在する必要がありますが、静的クラスには外部クラスのインスタンスが必要なくても作成できます.
  • OuterClass outerObject = new OuterClass();
    OuterClass.InnerClass innerObject = outerObject.new InnerClass();
    StaticNestedClass staticNestedObject = new StaticNestedClass();        

    内部クラスではなく静的ネストクラスを使用する

  • 公式ファイル外のブログで静的inner classを使う話を見ました.inner classには外部クラスへの参照値があるため、ゴミ収集ではインスタンス収集ができず、メモリが漏洩する可能性があります.[理想Java]
  • 金英漢の講義では,静的使用の利点は,このクラスでのみこの範囲を使用することである.
  • ソース:
    https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
    http://daplus.net/java-java%EC%9D%98-%EC%A0%95%EC%A0%81-%EC%A4%91%EC%B2%A9-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%99%9C/
    https://johngrib.github.io/wiki/java-inner-class-may-be-static/
    https://siyoon210.tistory.com/141
  • さらに知りたいのは、https://velog.io/@bongf/JavaJungSuk-ch7-objectOriented