Java接口原来还可以这么玩?

只需低头努力,剩下的交给时光,时间会公平地帮你处理这一切

今天在看Spring源码的时候,无意中发现了接口中竟然可以写具体的方法实现,这让我感到有点意外,在我的定义中接口只能写抽象方法,是不能进行具体实现的,有没有跟我一样想法的小伙伴

然后看到方法前面用default关键字修饰了,就查了一下default关键字的用法,果然又get到新技能了

请原谅我的无知,用了很多年的Java竟然不知道还可以这么用,学无止境啊~~~

什么是default方法

在以前的JDK版本中,接口中是不能实现方法的,所有的实现必须交给子类来实现,这样会存在一个问题

假如你的接口被很多个开发者实现,那么你要升级接口并且新增方法时,就很痛苦了

所有实现了你接口的开发者都需要兼容你的新接口,这势必带来很多开发上的成本,好在Java8中引入的default关键字

Java8中可以在接口中直接实现方法,并且跟子类的方法保持兼容,这很重要

可以在接口中实现default方法,作为默认的实现

子类可以选择覆盖,也可以直接使用默认的实现,这样就不会导致子类要强行实现接口中的方法

看个例子吧

我们定义了一个登录的接口(LoginService),有两个具体的实现PCLoginService、APPLoginService,分别表示PC登录和APP登录

public interface LoginService {
    public void login();
}
public class PCLoginService implements LoginService {
    @Override
    public void login() {
        System.out.println("PC Login");
    }
}
public class APPLoginService implements LoginService {
    @Override
    public void login() {
        System.out.println("APP Login");
    }
}

假如我现在接口升级,需要增加一个退出登录的方法,代码如下:

public interface LoginService {
    public void login();
    public void loginOut();
}

加了loginOut()方法后,所有的实现类都必须要实现这个方法

public class PCLoginService implements LoginService {
    @Override
    public void login() {
        System.out.println("PC Login");
    }

    @Override
    public void loginOut() {
        
    }
}
public class APPLoginService implements LoginService {
    @Override
    public void login() {
        System.out.println("APP Login");
    }

    @Override
    public void loginOut() {

    }
}

所有的实现者都要实现新增的方法loginOut(),这里只有两个实现者,假如有一百个实现者呢?那么大家都要跟着你的接口来改

用default方法,就可以避免这个问题

public interface LoginService {
    public void login();
    default public void loginOut(){
        System.out.println("logintOut default");
    }
}

把loginOut()方法用default关键字修饰,并且写了方法的具体实现后,子类就可以不用强制实现新的方法,它相当于直接继承了接口中的默认实现,当然子类也可以选择自己实现,这个完全没有问题,可以实现兼容

上面的例子,当然也可以通过设计模式来解决,这里仅仅是为了展示default关键字的用法

一个小的知识点,每天进步一点点~~~

如果感觉对你有些帮忙,请收藏好,你的关注和点赞是对我最大的鼓励!
如果想跟我一起学习,坚信技术改变世界,请关注【Java天堂】公众号,我会定期分享自己的学习成果,第一时间推送给您

在这里插入图片描述

  • 24
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值