10

父类不是也不能抽象。重载方法受到保护,因此接口不能在那里使用。

考虑到这两个限制是否可以做到?

4

3 回答 3

8

您不能强制重写该方法-这就是抽象方法的用途(您已声明这不是一种选择)。

一种可能性是让基类中的方法抛出一个UnsupportedOperationException. 然后,子类必须重写它以防止抛出错误。这样,您至少可以检测该方法是否已被覆盖。

例如:

public class Father {
    public void method ( ) {
        throw new UnsupportedOperationException( );
    }
}

public class Child1 extends Father {

}
public class Child2 extends Father {
    public void method ( ) {
        // Do something useful here...
    }
}

调用Child1.method()会抛出UnsupportedOperationException,表明它没有被覆盖Fathermethod()调用Child2.method()不会抛出异常,这意味着它被覆盖method()

于 2012-12-20T19:45:41.957 回答
3

您可以从父级抛出 UnsupportedOperationException。这在编译时无济于事,但在运行时会有帮助。

于 2012-12-20T19:45:21.243 回答
2

由于 abstract 不是一个选项,您可以让该方法抛出一个NotImplementedException. 这是一个更明确的例外UnsuppotedOperationException
注意:这不会阻止代码编译,只会在运行时抛出异常。

Public Clazz {
    public void methodToOverride(){
        Throw new NotImplementedException();
    }
}

一些示例实现:
Apache
Sun
Sharkysoft.com

于 2012-12-20T19:46:14.010 回答