ホームページ >Java >&#&チュートリアル >Java では「super.super.method();」が許可されないのはなぜですか?

Java では「super.super.method();」が許可されないのはなぜですか?

DDD
DDDオリジナル
2024-12-23 11:13:091048ブラウズ

Why is `super.super.method();` Not Allowed in Java?

なぜ super.super.method(); なのかJava では禁止されていますか?

super.super.method(); の使用。 Java ではカプセル化の問題により禁止されています。カプセル化は、親クラスの動作の回避を防ぐことを目的としています。

(同じメソッド内で) 独自のクラスの動作をバイパスすることが合理的な場合もありますが、親の動作をバイパスしないことが重要です。次のクラス階層を考えてみましょう。

  • Collection: アイテム コレクションの基本クラス
  • RedCollection: 赤いアイテムのコレクションを表すサブクラス
  • BigRedCollection: 表す RedCollection のサブクラス大きな赤いアイテムのコレクション

次のように定義するのが論理的ですメソッド:

  • Collection#add(Item): コレクションに項目を追加します。
  • RedCollection#add(Item): 追加された項目が赤色になるようにオーバーライドされたメソッドです。
  • BigRedCollection#add(Item): 追加されたアイテムが大きく、かつ確実に大きくなるようにオーバーライドされたメソッドred.

これにより、サブクラスが親クラスによって課された制約に従うことが保証されます。

ただし、super.super.add() が許可されている場合、悪意のある NaughtyCollection サブクラスが存在する可能性があります。 RedCollection の赤いアイテム要件をバイパスします:

  • NaughtyCollection#add(Item):赤の項目要件を無視して、任意の項目を追加します。

これにより、RedCollection によって確立された不変条件が破られ、赤ではない可能性のある項目のコレクションが作成されます。

したがって、super.super Java では、カプセル化を維持し、クラスの動作を強制するため、.method() 呼び出しは禁止されています。

以上がJava では「super.super.method();」が許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。