2017-07-04 93 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异常的原因之一。

相关问题