20

重複の可能性:
なぜ super.super.method();なのか Javaでは許可されていませんか?

次のように、互いに継承する3つのクラスがあります。

A
 ↳
   B
    ↳
     C

各クラス内には、次のメソッドがあります。

protected void foo() {
    ...
}

クラス内で、呼び出しずにクラスCから呼び出したい:fooAfooB

protected void foo() {
    // This doesn't work, I get the following compile time error:
    // Constructor call must be the first statement in a constructor
    super().super().foo(); 
}


いくつかのコンテキスト情報を編集
: クラス B は、使用する実際のクラスです。クラス C は単体テスト クラスであり、いくつかの変更が加えられています。foo内部のメソッドBは、望ましくないことを行うため、内部でオーバーライドしますC。ただしfoo、クラス内Aは便利で、呼び出す必要があります。

4

2 に答える 2

21
  • スーパークラスでメソッドを呼び出すにはsuper.foo()、 ではなくを使用しますsuper().foo()super()親クラスのコンストラクターを呼び出します。
  • 呼び出す方法はありませんsuper.super.foo()super.foo()クラス B に呼び出しを追加してsuper.foo()、C を呼び出すsuper.foo()と Bが呼び出され、B がfoo()Aを呼び出すようにすることができます。
于 2012-08-13T14:07:13.463 に答える
13

Javaではできません。にアクセスするためのB明示的な方法を提供することに頼る必要があります。Afoo

于 2012-08-13T14:07:03.150 に答える