Java如何在抽象类中可选重写方法? [英] Java how to optional override method in abstract class?

查看:645
本文介绍了Java如何在抽象类中可选重写方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有一个基类:

 公共抽象类BaseFragment扩展了Fragment {
...
受保护的抽象布尔boolean postExec();
...
}

然后从中派生出其他班级(es)(例如Fragment_Movie,Fragment_Weather ...)

 公共类Fragment_Music扩展了BaseFragment {
@Override
受保护的布尔值postExec(){
返回false;
}
}

但是,在基类中添加新方法时:

 公共抽象类BaseFragment扩展Fragment {
...
受保护的抽象boolean postExec();
受保护的抽象布尔值parseFileUrls();
...
}

Eclipse立即显示错误,要求实现此功能已经派生的类中的新方法。



可以在基类中添加一个默认抽象方法,以便即使我们不在派生类中实现该方法也不会显示错误。 ? (因为每次基类追加新方法都需要花费大量时间来修复每个派生类。)

解决方案

最简单的解决方案是添加带有存根实现的方法。声明为抽象需要非抽象扩展来实现该方法。



执行类似的操作可以减轻编译问题,尽管显然会抛出该错误。不带覆盖而使用时的异常: b抛出新的NotImplementedException(未重写方法);
}
}


Let's say we have a base class:

public abstract class BaseFragment extends Fragment {
    ...
    protected abstract boolean postExec();
    ...
}

And then derive from it to have other class(es) (e.g. Fragment_Movie, Fragment_Weather ...)

public class Fragment_Music extends BaseFragment{
    @Override
    protected boolean postExec() {
        return false;
    } 
}

However, when adding a new method to the base class:

public abstract class BaseFragment extends Fragment {
    ...
    protected abstract boolean postExec();
    protected abstract boolean parseFileUrls();
    ...
}

Eclipse instantly shows up error asking to implement this new method in the already derived classes.

Is there away to add a "default" abstract method in the base class, so that it does not show error even if we don't implement it in the derived class? (because it'd take lot of time to fix each derived class every time the base class appends new method. )

解决方案

The easiest solution would be to add the method with a stubbed implementation. Declaring it abstract requires non-abstract extensions to implement the method.

Doing something like this would ease your compilation problems, though it will obviously throw exceptions when used without overriding:

public abstract class BaseFragment extends Fragment {
    protected boolean doSomethingNew() {
        throw new NotImplementedException("method not overridden");
    }
}

这篇关于Java如何在抽象类中可选重写方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆