我对java中的类的结构有疑问:
我有第一堂课:抽象的MyClass
public abstract class MyClass
{
protected void abstract monitor();
}
然后我有一个抽象迭代器
public abstract class MyClassIterator<T> extends MyClass
{
protected void abstract monitor(T data);
}
在实践中,我将创建将继承自MyClass或MyClassIterator的类。
我想确保MyClass的所有实例都实现了监视器,但是对于迭代器,我怎么能避免插入像
这样的东西protected void monitor() {};
只是为了实现它:/
感谢您的任何想法:)
答案 0 :(得分:3)
在monitor
中添加MyClass
的默认实施,并带有自定义异常
public abstract class MyClass
{
protected void abstract monitor()
{
throw new NotImplementedException();
}
}
因此,MyClassIterator
不必实现该方法,MyClass
的其他子类必须覆盖它。
答案 1 :(得分:1)
如果您不希望MyClassIterator
子类必须实现此方法,则必须将空实现添加到MyClassIterator
。
您还可以在实现中抛出一些异常。
public abstract class MyClassIterator<T> extends MyClass
{
protected abstract void monitor(T data);
protected void monitor() {
//optional
throw new UnsupportedOperationException();
}
}
注意:您无法在void
之前撰写abstract
,您需要在monitor(T data)
方法中修复此问题,就像在我的回答中一样。