Java が Super.super.method() へのアクセスを制限する理由
Java では、構文 super.super.method();は、他の多くの言語に存在するにもかかわらず、許可されていません。この制限は、サブクラスが親クラスの動作に違反できないようにするための Java のカプセル化の重視から生じています。
カプセル化により、サブクラスはスーパークラスによって定義されたルールに従うことが強制されます。親クラス (Items) と 2 つのサブクラス (RedItems と BigRedItems) を持つクラス階層があるとします。 RedItems は、それに含まれるすべてのアイテムが赤でなければならないことを強制しますが、BigRedItems はさらに、アイテムが大きくて赤であることを制限します。
このシナリオでは、 super.super.add(); が許可されます。カプセル化が壊れてしまいます。サブクラス (NaughtyItems) は、super.super.add();:
public class NaughtyItems extends RedItems { @Override public void add(Item item) { // I don't care if it's red or not. Take that, RedItems! super.super.add(item); } }
を直接呼び出すことで RedItems の赤色アイテム制約をバイパスできます。これは RedItems の不変条件に違反し、任意の色のアイテムを NaughtyItems に追加できるようになります。 .
本質的には、super.super.method();サブクラスが複数の親クラスの動作をバイパスできるようになり、継承のカプセル化原則が損なわれます。 Java では、サブクラスが親クラスの動作を尊重し、適切に構造化されたクラス階層を維持するために、これを禁止しています。
以上がなぜ Java は `super.super.method()` を許可しないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。