2013-08-28 28 views
-2

我有一個超類與final方法的Java:不會強迫要覆蓋

public final void foo(){ ... }

+0

您可以添加具有相同名稱但簽名不同的方法。否則編譯器會打擾你。 –

+1

聽起來像你在你的設計中有問題。除非孩子'foo'具有不同的簽名,否則超級'foo()'不是最終的,我沒有看到它發生。 – rocketboy

+0

我需要這兩種方法完全一樣,我不知道是否有一些註釋用於此目的。 – Ahmad

回答

1

不,你不能做到這一點。

覆蓋子類中的方法,其超類方法標記爲final是不可能的 。您可以添加具有不同簽名的方法

final關鍵字應用於方法的目的是它不允許子類方法重寫它。

1

您不能覆蓋超級方法final,但您可以重載它。

只有當它有一個不應該被改變的實現並且它對於對象的一致狀態至關重要時才做最後的方法。

1

最終的主要目的是防止重寫。所以,你不能覆蓋最終的方法。 你仍然可以重載最終的方法。

0

不知道爲什麼你必須具有相同的名稱。要麼是它的目的是一種不同的方法,那麼它可以有一個不同的名字沒有問題,或者你試圖做一些凌駕你聲稱沒有做的事情。

如果您的子類需要干涉該方法的接口實現,請考慮該接口實現的內部類。

否則在子類中的方法不重寫超類方法具有相同的名稱如果任:

  • 它有不同的參數類型
  • 超類方法是私有的
  • 超類方法是包-private和子類位於不同的包中