实现抽象方法而不直接调用它

时间:2017-09-22 00:07:22

标签: java abstract-class

我有一个抽象类

public abstract class Sender {

    private IThrottler throttler;

    public final Object sendMessage(String smsText, String smsSenderName, String contactNumber) throws Exception {
        tdLogger.info("sending request >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        String messageId = (String) sendSMS(smsText, smsSenderName, contactNumber);
        tdLogger.info("request sent    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

        return messageId;
    }

    public final Object throttleMessage(String smsText, String smsSenderName, String contactNumber) throws Exception {
        if (throttler != null) {
            throttler.acquire();
            tdLogger.info("sending request >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            String messageId = (String) sendSMS(smsText, smsSenderName, contactNumber);
            tdLogger.info("request sent    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
            return messageId;
        } else {
            throw new Exception("throttler is not initialized");
        }
    }

    public abstract Object send(String smsText, String smsSenderName, String contactNumber) throws Exception;

}

我有另一个课程SenderImpl,它扩展了Sender

有没有办法强制实现函数send而不能直接调用它,只能调用sendMessagethrottleMessage强制运行某些逻辑?

1 个答案:

答案 0 :(得分:0)

您可以创建抽象发送方法protected,以便只有同一个包中的子类和类可以调用它。即使可以通过在同一个包中放置一个类来规避它,也可以达到你想要的目的。