2012-08-13 11 views
12

可能性の重複:
Why is super.super.method(); not allowed in Java?のJava:スーパーを呼び出す方法()super()をオーバーライドされたメソッドに(祖父母法)

私は、彼らがお互いから継承する3つのクラスを持っています次の:私は次のメソッドを持つ各クラス内

A 
↳ 
    B 
    ↳ 
    C 

を:

私は Bfooを呼び出さずにクラス Aから fooを呼び出したいクラス Cインサイド
protected void foo() { 
    ... 
} 

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(); 
} 

EDIT
いくつかの文脈情報:
クラスBは、我々が使用する実際のクラスです。クラスCは単体テストクラスですが、いくつかの変更があります。 fooメソッド内B私たちが望まないものはいくつかありますので、Cの中で上書きします。しかし、Afooが便利で、呼び出す必要があります。

+0

foo()を呼び出しますBにsuper.foo()を呼び出しますので、あなたは、このトピック のhttpを見てみましょう、クラスBにsuper.foo()の呼び出しを追加することができます.com/questions/586363/why-is-super-super-method-not-in-java – Pr0gr4mm3r

答えて

7

Javaでは不可能です。 Bに頼って、Afooにアクセスする明確な方法を提供する必要があります。

14
  • スーパークラスのメソッドを呼び出すには、super().foo()ではなくsuper.foo()を使用します。 super()は、親クラスのコンストラクタを呼び出します。
  • super.super.foo()に電話する方法はありません。 // stackoverflowの:Cでsuper.foo()を呼び出すことを、今度はA.
関連する問題