ホームページ >Java >&#&チュートリアル >Java では「super.super.method();」が無効なのはなぜですか?
「super.super.method();」の構文がなぜそうなるのかJava では無効です
Java 言語では、「super.super.method();」の構文が許可されていません。
カプセル化の制約
オブジェクト指向プログラミングの基本原理であるカプセル化は、アクセスを制限することを目的としています。オブジェクトの内部状態と動作に影響します。 Java では、これはアクセス修飾子 (private、protected、public など) と継承によって実現されます。
サブクラスがスーパークラス内のメソッドをオーバーライドすると、そのサブクラスは事実上、サブクラス内でそのメソッドを実装する唯一のプロバイダーになります。 。これにより、サブクラス内のメソッドへの変更がスーパークラスや他のサブクラスでの動作に影響を与えないことが保証されます。
カプセル化違反
「super.super」を許可する。方法();"このカプセル化原則に違反します。次の継承階層を考えてみましょう。
class Animal { void eat() { System.out.println("Animal eats"); } } class Cat extends Animal { @Override void eat() { if (!isFeline()) throw new IllegalArgumentException(); super.eat(); } } class Lion extends Cat { // This "super.super.eat()" would allow bypassing Cat's validation and break encapsulation. @Override void eat() { super.super.eat(); } }
この例では、Cat クラスは、動物が食べるにはネコ科動物でなければならないという検証ルールを強制します。 super.super.eat() が許可されている場合、Lion クラスは、Animal クラスから Eat() メソッドを直接呼び出して、Cat のオーバーライド実装によって課されたカプセル化を破ることによって、この検証をバイパスできます。
代替案「super.super.method();」中に
にアプローチします。 Java では許可されていません。特定の望ましい動作を実現するための代替アプローチがあります:
以上がJava では「super.super.method();」が無効なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。