java挎包调用方法protected,java – 调用确保方法

我有这门课:

public abstract class AbstractIncomingCall {

/*

class properties

*/

public void changeStatus(/*some parameters*/){

//store parameters in class properties

isValid();

}

protected abstract boolean isValid();

}

……这个课程扩展了:

public class IncomingCallImpl extends AbstractIncomingCall{

//I override the parent's method

public void changeStatus(/*same parameters as parent's method*/) {

super.changeStatus(/*same parameters as parent's method*/);

//do something interesting

}

protected boolean isValid() throws StatusChangeNotOccurredException {

//implement my validation algorithm

}

我想要实现的是确保每当调用changeStatus(/ * some parameters * /)时调用isValid()方法;请注意,isValid()方法仅在具体类中实现,它还使用从父类继承的类属性.

我有没有办法确保调用isValid()而不是调用super?

我非常不喜欢我必须传递参数的事实,我认为我完全走错了方向并且有一种更清洁的方法来实现这一点.

我想在我的代码中保留的是抽象类中的“isValid()调用逻辑”,因为每个调用都需要进行验证,我不能依赖于我将来记住这个:P

提前致谢 :]

解决方法:

听起来你想要changeStatus()遵循模板方法模式.在这种模式中,您在抽象类中定义changeStatus()(如果您不信任人们正确扩展,则将其设置为final),并让它调用所需的方法:

public final void changeStatus()

{

doSomethingSubclassSpecific();

isValid()

}

protected abstract doSomethingSubclassSpecific();

标签:java,inheritance

来源: https://codeday.me/bug/20190712/1443138.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值