Java 中的 Default 关键字
最佳答案 问答题库728位专家为你答疑解惑
default 关键字:是在 Java 8 中引入的新概念,也可称为 Virtual extension methods——虚拟扩展方法与public、private等都属于修饰符关键字,与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。
default 修饰方法时只能在接口类中使用,在接口中被 default 标记的方法可以直接写方法体,而无需修改所有实现了此接口的类。
接口默认方法
我们都知道 Java 中的接口是用来实现的,接口中是没有实现的方法。
使用 default 关键字可以打破这个限制,当定义了一个接口,但是我们接口中的方法用了 default 关键字,我们就可以在这个方法中进行实现了。
这时,我们不需要再定义一个实现类类实现接口中的所有方法。
之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改该接口的全部实现类。
同时因为设计实现的问题,我们通过设计接口来进行不同的实现,在基础框架曾经,这个设计是有很多好处的。
但,在实际业务层,一个接口多个实现的方法反而谁增加很多复杂度。
使用 Default 关键字
用 default 关键字定义的方法是全局的,你可以在不同接口中定义一个相同的方法,这个没有问题。
如下图,我们在代码中定义了 2 个接口,这 2 个接口都有一个相同的 default 方法。
实现类中只实现一个接口
如果在实现类中我们只实现一个接口。
例如下图,我们修改了我们的方法,我们在实现中只实现了 TestInterface1
上面的程序也是可以运行的没有问题。
实现类中实现 2 个接口
问题就是在这里了。
如果我们在实现类中同时实现了 2 个接口,但这 2 个接口都有一个相同方法名的 default 方法。
编译器会在这里报错,简单来说就是默认的方法冲突,程序不知道应该用哪个实现方法。
这个应该很好理解,因为这 2 个接口中都有相同的方法名,而且这个方面都是默认的,程序运行的时候确实不知道应该是用 TestInterface1 还是 TestInterface2 的默认方法。
所以可以在这里用一个 @Override 来告诉实现类,我们是用的那个实现方法。
甚至
@Overridepublic void show() {TestInterface1.super.show();TestInterface2.super.show();}
这样写都是没有问题的。
运行的结果为:
Default TestInterface - 1
Default TestInterface - 2
总结
Default 方法通常用在接口中,用于为接口中定义的方法提供一个默认的实现。
当我们使用了 default 关键字修饰了方法后,我们可以不为接口定义实现,而直接使用接口中定义的默认方法来处理逻辑。
我们测试的代码网站逻辑如上图。
下面为文本的代码,供大家拷贝和在本地进行的是
interface TestInterface1 {// default methoddefault void show() {System.out.println("Default TestInterface - 1 ");}
}interface TestInterface2 {// Default methoddefault void show() {System.out.println("Default TestInterface - 2");}
}public class Main implements TestInterface1, TestInterface2 {private static final Logger logger = LoggerFactory.getLogger(Main.class);public static void main(String[] args) {new Main().show();}@Overridepublic void show() {TestInterface1.super.show();TestInterface2.super.show();}
}
因为 default 这个关键字还比较新,在 JDK 8 以后才有的,因此有必要在面试之前了解下,在实际的项目上,可能用的情况不多。
Java 中的 Default 关键字 - Java - iSharkFly
99%的人还看了
相似问题
- MeterSphere | 接口测试请求体中,int类型的入参实现动态化变量
- postman设置接口关联这样做,薪资直接涨3k
- 接口自动化中cookies的处理技术
- C#中抽象类、抽象方法和接口暨内联临时变量的精彩表达
- 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests
- 一次显著的接口性能优化,从10s优化到0.9s
- 做接口自动化遇到的20个难点,记录下我是如何解决的!
- 全网最全jmeter接口测试/接口自动化测试看这篇文章就够了:跨线程组传递jmeter变量及cookie的处理
- 微信小程序发货信息录入接口 错误上传时间非法,请按照 RFC 3339 格式填写?
- 京东商品详情数据接口【京东API接口开发系列】,监控京东价格走势,接口代码示例,可高并发批量获取
猜你感兴趣
版权申明
本文"Java 中的 Default 关键字":http://eshow365.cn/6-21553-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!