Java(またはその逆)のサブクラスよりも内部クラスを使用する方が有益な状況はありますか?私の現在の理解に基づいて、内部クラスはフィールドとメソッドにアクセスできますこれは、継承を使用する場合とどのように異なりますか?
サブクラスは通常、publicおよびprotectedというラベルの付いたすべてのフィールド/メソッドにアクセスできます。親クラスでprivateとラベル付けされたフィールドには、getterメソッドを使用してサブクラスでアクセスできます。これまで見てきたことに基づいて、メソッドがprivateとラベル付けされている場合、それらは通常、publicまたはprotectedのいずれかとラベル付けされているクラスの他のメソッドで呼び出されます。確かに、私は経験豊富なJavaプログラマーではありませんが、それが一般的な傾向のようです。
私の現在の理解に基づくと、どちらかを選択することには実際には何のメリットもないようです。継承よりも内部クラスを使用する理由と時期(またはその逆)について誰かが洞察を与えることができますか?
内部クラスとサブクラスの間には大きな違いがあります。
状況について:
継承を使用する場合は、2つのクラス間に「is-a」関係を定義します。つまり、ChildClass
is aParentClass
です。
一方、内部クラスは必ずしも外部クラスに直接関連しているわけではありません。内部クラスを持つ主な理由は、外部クラスが他のクラスに通知せずにその機能を利用するためです。
頭のてっぺんから思いつく最も良い例はLinkedList
です。ある種のプライベートNode
クラスを使用して、各要素のコンテンツを格納します。もちろん、単一のNode
はLinkedList
...ではありませんが、LinkedList
で構成されていない限りNodes
は機能しません。 LinkedList
以外のクラスがNode
クラスが存在することを知る理由もありません。
サブクラスはその親クラスの変数とメソッドを継承しますが、内部クラスは継承しません。
そのため、子クラスに親のメンバーが必要な場合はサブクラスを使用し、その一部を実行するためだけに必要な場合は内部クラスを使用する必要があります。
たとえば、Listという名前のクラスでNodeという名前の内部クラスを使用して、Nodeをメンバーとして使用できるようにします。
たとえば、メルセデスはCarのメンバーを継承し、必要に応じてCarのメソッドをオーバーライドする必要があるため、Carという名前のクラスでMercedesという名前のサブクラスを使用します。
これは簡単です。しかし、内部クラスとサブクラスは同じではありません。
サブクラスは、継承ロジックがある場合に使用します。たとえば、RectangleはShapeなので、RectangleはShapeから継承できます。
内部クラスは、特定のクラスでのみ使用する必要があるクラスがある場合に使用されます。そうすれば、内部クラスを使用する必要があるクラスにいない限り、誰もクラスを使用しません。例:クラスAがあります。クラスaにはマップがあります。 Keyクラスは、複合キークラスを定義するために作成したクラスであり、A内でのみ使用されます。したがって、Keyは内部クラスにすることができます。このようにして、ファイル(クラス)を削減できるため、他の開発者が処理および理解する必要がありません。彼はAを使用しています
それが理にかなっていることを願っています