父班不是也不能抽象。 过载的方法受到保护,因此不能在那里使用接口。
考虑到这两个限制是可以的吗?
答案 0 :(得分: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
,表示它没有覆盖Father
的{{1}}。调用method()
不会抛出异常,这意味着已覆盖Child2.method()
。
答案 1 :(得分:3)
您可以从父级抛出UnsupportedOperationException。这对编译时没有帮助,但会在运行时。
答案 2 :(得分:2)
由于抽象不是一个选项,你可以让方法抛出NotImplementedException
。这是一个比UnsuppotedOperationException
更明确的例外
注意:这不会阻止代码编译,只会在运行时抛出异常。
Public Clazz {
public void methodToOverride(){
Throw new NotImplementedException();
}
}
一些示例实施:
Apache
Sun
sharkysoft.com