1

ChildrenFather、およびの 3 つのクラスがありますAncestorChildrenextends Father、およびFatherextends Ancestor、以下のように:

public class Ancestor {
    public void test() {
    }
}

public class Father extends Ancestor {
    @Override
    public void test() {
    }
}

public class Children extends Father {
    @Override
    public void test() {
    }
}

Children の test() メソッドで祖先の test() メソッドを使用するにはどうすればよいですか? 父の test() メソッドをスキップしたい。

4

2 に答える 2

1

できません。Java では、次のようなことは許可されていませんsuper.super.method()。この理由はこの優れた回答で概説されていますが、最終的にはカプセル化に違反しているということです。

機能が本当に必要で、このようなことをするのが理にかなっている場合は、メソッドFatherを呼び出すだけのメソッドをいつでもクラスに追加できますsuper.test()が、通常、このようなことを行うのは悪い習慣です。本当に正当な理由がない限り、コードを再考してください。どちらかからメソッドを呼び出す必要は実際にはありませthissuper

于 2012-06-25T04:03:06.820 に答える
0

簡単に言えば、できません。これはカプセル化に違反しており、一般的に悪い習慣です。あなたが望むものを達成するためのより良い方法は、Ancestor.test() を抽象化し、Ancestor.baseTest(); のような新しい保護されたメソッドを持つことです。次に、Father、Child、およびロジックにアクセスしたいその他のサブクラスから Ancestor.baseTest() を呼び出すことができます。

于 2012-06-25T04:03:32.887 に答える