2017-07-04 114 views
-4

我不知道爲什麼我無法覆蓋一種方法,但其他方法可以替代其他方法。@Override不適用於某種方法,但是適用於其他方法

這裏是我想在另一個類要覆蓋的方法(不與方法擴展類):

public static void onOk() throws Exception { 
    throw new Exception("test"); 
} 

我試圖超越,但它說:「註釋這裏不允許」,但下面的方法有很多其他的方法只是被重寫。

@Override <- red underlined error "Annotation not allowed here" 
InputAdressDialogFragment.onOk(){ 
} 

@Override <- works! The compiler accepts 
    public View onCreateView(
+6

在第一個例子中,你正在調用一個方法。在第二個例子中,你*聲明瞭一個方法。請注意,無論如何您都無法重寫靜態方法,並且*有*可以擴展一個類來覆蓋它的一個方法。你真的不清楚你想做什麼,說實話... –

+3

你能看不到'@Override public View onCreateView(...'和'@Override InputAdressDialogFragment.onOk(){ '? –

+1

你不能重寫'static'方法,要重寫一些方法,它必須在它的父類中可用,而且不是靜態的。這裏你直接調用方法名的類引用,所以不能'override' 'onOk()'方法 –

回答

0

一類Child其中Child extends Parent可以在其superParent其爲非靜態類只定義override方法。

在靜態上下文中沒有當前對象的隱式引用(this),因爲靜態方法不需要任何對象來調用,就像正常的非靜態方法一樣。靜態方法不是基於對象的,而是基於類的。

2

根據定義,@Override用於重寫方法。

靜態方法不能被覆蓋 - 有關詳細信息,請參閱here

這就是爲什麼使用靜態被認爲是良好OOP異常的原因之一。

相關問題