抽象类实现接口的意义&实战demo

     抽象类当然可以实现接口,意义如下:一般来说使用普通类来实现接口时,这个普通类需要实现接口中的全部方法,这样会引起普通类中出现多余的方法,造成代码冗余。但如果我们使用抽象类来实现接口,那么这个抽象类只实现所需要的方法即可,并且当其他类继承这个抽象类时,仍然可以实现接口中有但是抽象类没有实现的方法。

   举个简单栗子!

如以下代码,抽象类只是实现了接口A中的方法a,方法b,但是当类C继承抽象类B时,可以直接实现接口A中的c方法,有一点需要注意的时,类C中的方法a,方法b都是调用的父类B的方法a,方法b,不是直接实现接口的方法a,方法b。

/**
 * 接口
 */
public interface A {
    public void a();
    public void b();
    public void c();
}
/**
 * 抽象类
 */
abstract class B implements A {
    public void a(){
        System.out.println("抽象类的a方法");
    }
    public void b(){
        System.out.println("抽象类的方法");
    }
}
/**
 * 具体实现类
 */

public  class C extends B {

    public void a(){
        System.out.println("具体类C的a方法");
    }

    public void b(){ super.b();}

    public void c() {
        //实现接口A的c方法
        System.out.println("具体类C实现接口A的c方法");
    }
}
public class test { 
   public static void main(String[] args) {
        A  demo = new C();
        demo.a();
        demo.b();
        demo.c();
    }

输出结果:
   具体类C的a方法
   抽象类的方法
   具体类C实现接口A的c方法

项目实战--短信发送栗子

/**
 * 短信对接接口
 */
public interface SendMessageService {

    Boolean checkVerifyCode(String mobile, String verifyCode);

    CorrectResponse sendVerifyCodeMessage(String mobile, String config);

    SendMsgResponse sendMessage(String message, String mobile,String config);
}

 抽象类实现两个通用的接口方法,供多个地区请求调用

/**
 * 短信对接抽象类
 */
@Slf4j
public abstract class AbstractSendMessageService implements SendMessageService {

    private static final int MESSAGE_MAX_LENGTH = 700;

    private static final int MESSAGE_SUCCESS_LINE_NUM = 2;

    private static final int VERIFY_CODE_VALID_TIME = 10;

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 生成随机6位数字
     *
     * @return
     */
    public String generateVerifyCode() {
        StringBuilder str = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            str.append(random.nextInt(10));
        }
        return str.toString();
    }

    @Override
    public Boolean checkVerifyCode(String mobile, String verifyCode) {
        String value = stringRedisTemplate.opsForValue().get(mobile);

        if (value == null) {
            return Boolean.FALSE;
        }

        String[] valueSplit = value.split(",");

        String correctCode = stringRedisTemplate.opsForValue().get(mobile);

        return valueSplit[0].equalsIgnoreCase(verifyCode);
    }

    @Override
    public CorrectResponse sendVerifyCodeMessage(String mobile, String config) {
        String value = stringRedisTemplate.opsForValue().get(mobile);
        JSONObject jsonObject = JSONObject.parseObject(config);
        if (value != null) {
            String[] valueSplit = value.split(",");
            Long codeTime = Long.valueOf(valueSplit[1]);
            if (System.currentTimeMillis() - codeT
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值