2012-08-13 65 views
12

可能重複:
Why is super.super.method(); not allowed in Java?的Java:如何調用super()超()的覆蓋方法(祖父母法)

我有3個班,他們從彼此繼承如下:

A 
↳ 
    B 
    ↳ 
    C 

每個類我有以下方法中:

protected void foo() { 
    ... 
} 

裏面C我想打電話從Afoo類不調用Bfoo

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內覆蓋它。但fooA是有用的,需要被調用。

+0

看看這個話題 的http://計算器.COM /問題/ 586363 /爲什麼 - 是超級超級方法 - 不被允許式的Java – Pr0gr4mm3r 2012-08-13 14:07:31

回答

7

這在Java中是不可能的。您需要依靠B爲您提供明確的方式來訪問Afoo

14
  • 要調用父類的方法,你可以使用super.foo(),不super().foo()super()調用父類的構造函數。
  • 沒有辦法撥打super.super.foo()。您可以在B類的調用添加到super.foo(),使主叫用C super.foo(),將調用super.foo()在B,其將依次調用foo()在A.