ホームページ > Java > &#&チュートリアル > なぜ Java は `super.super.method()` を許可しないのでしょうか?

なぜ Java は `super.super.method()` を許可しないのでしょうか?

DDD
リリース: 2024-12-26 20:42:11
オリジナル
679 人が閲覧しました

Why Doesn't Java Allow `super.super.method()`?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート