Java:如何强制给定的受保护方法被子类重载?

时间:2012-12-20 19:42:06

标签: java overloading parent-child

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

考虑到这两个限制是可以的吗?

3 个答案:

答案 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