父类不是也不能抽象。重载方法受到保护,因此接口不能在那里使用。
考虑到这两个限制是否可以做到?
您不能强制重写该方法-这就是抽象方法的用途(您已声明这不是一种选择)。
一种可能性是让基类中的方法抛出一个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
,表明它没有被覆盖Father
。method()
调用Child2.method()
不会抛出异常,这意味着它已被覆盖method()
。
您可以从父级抛出 UnsupportedOperationException。这在编译时无济于事,但在运行时会有帮助。
由于 abstract 不是一个选项,您可以让该方法抛出一个NotImplementedException
. 这是一个更明确的例外UnsuppotedOperationException
。
注意:这不会阻止代码编译,只会在运行时抛出异常。
Public Clazz {
public void methodToOverride(){
Throw new NotImplementedException();
}
}
一些示例实现:
Apache
Sun
Sharkysoft.com