私が取り組んでいるテキストでは、作成者は静的なネストされたクラスを使用したコード例を示し、静的なネストされたクラスが「気になる」場合は、別のクラスとして記述できるとコメントしています。
なぜそれはあなたを悩ますのですか?Javaで静的にネストされたクラスを使用することの欠点は何ですか?
私が取り組んでいるテキストでは、作成者は静的なネストされたクラスを使用したコード例を示し、静的なネストされたクラスが「気になる」場合は、別のクラスとして記述できるとコメントしています。
なぜそれはあなたを悩ますのですか?Javaで静的にネストされたクラスを使用することの欠点は何ですか?
利点: 作成者が意味したのは、静的にネストされたクラスが、それを囲む外部クラスとは完全に別個の.classにコンパイルされることでした。したがって、それがあなたを悩ませたり、物事を複雑にしたり、混乱させたりする場合は、別々に使用する方がよいでしょう。静的にネストされたクラスは、外部クラスインスタンスに依存せず、独自に実行できます。main関数でさえ、静的にネストされたクラス内に記述して直接呼び出すことができます。また、他のタイプのネストされたクラスの場合とは異なり、実行時に作成されるオブジェクトの数を減らすことができるという利点があります。
短所 私が考えることができる唯一の短所は、静的にネストされたクラスが外部クラスの保護されたメンバーとプライベートメンバーの両方にアクセスできることです。クラスXとクラスYがあるとします。YがXのプライベートメンバーにアクセスできるが、他の世界にはアクセスできないようにするには、YをXの内部クラスにすることが役立ちます。それはそれらを一緒にグループ化することによってカプセル化のことを満たします。
ただし、Static Nestedクラスは、そのメンバーにアクセスしている間、Outerクラスのアクセシビリティ修飾子を気にしません。それは独立して生きることができるので、外の世界からの誰かが外のクラスの私的なメンバーと混ざり合うことを可能にし、それ故にカプセル化を破ることができます。
Staticネストされたクラスを、Outerクラスのコンテキスト/インスタンスを使用せずにOuterクラスのプライベートメンバーと保護されたメンバーにアクセスできる別のトップレベルクラスとして扱い、悪用のために外部に自由に販売します。
ネストされたクラスやJavaの内容について理解を深めるには、本を読む前にOracleのドキュメントを確認することをお勧めします。http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
ネストされたクラスは、彼がそれを理解していないので、初心者を悩ますかもしれません。著者はそのような初心者を混乱させないように注意し、彼を慰めるために彼はシンプルなトップレベルのクラスを提供しています。一方、ネストされたクラスは、コンテンツが非常にミニマルであり、関連するすべてのものを1か所にまとめることが読みやすくなるため、この例ではおそらくより適切です。
静的にネストされたクラスは、それを囲むクラスで定義されたインスタンス変数またはメソッドを直接参照することはできません。オブジェクト参照を介してのみそれらを使用できます。
静的にネストされたクラスは、他のトップレベルクラスと同じように、その外部クラス(および他のクラス)のインスタンスメンバーと対話します。静的にネストされたクラスは、動作上、別のトップレベルクラスにネストされたトップレベルクラスです。
多分これはあなたを助けるかもしれません----> http://www.techrepublic.com/article/explore-javas-static-nested-classes-and-inner-classes/5815620