JDK1.8接口的默认实现
2018-03-31 16:47
225 查看
很多时候,别人问我接口和类的区别的时候,我都会回答接口里面只能有抽象方法,而不能够有具体方法,但是今天看Mybatis源码的时候,发现了有一段代码是判断接口里面的默认方法的,于是我发现原来对接口的认识太过于肤浅了。
JDK1.8之后,在接口里面可以定义default方法,default方法里面是可以具备方法体的,当子类实现该接口之后,不需要重写该方法即可以调用该方法。
ok,看看代码
我们可以看到,实现类可以直接继承父接口的默认方法,这个默认实现子类也是可以重写的。
现在抽象类和接口就更像了,那么我们来看看现在接口和抽象类的区别:
抽象类只能单继承,接口可以多现实
抽象类中可以用private、protected方法,接口不可以用
那么在接口中加入default方法有什么好处呢?
对于一些公有的方法,直接使用默认的方法,就不用在实现类中写重复代码了。
可以对代码零入侵的加入一些新的方法
JDK1.8之后,在接口里面可以定义default方法,default方法里面是可以具备方法体的,当子类实现该接口之后,不需要重写该方法即可以调用该方法。
ok,看看代码
//定义一个接口 里面有一个默认方法 public interface Face { default String get(){ return "123"; } } //定义一个实现类,空类 public class FaceImp implements Face { } //写一个测试类 public class Main { public static void main(String[] args) { Face face=new FaceImp(); System.out.println(face.get()); } } 测试结果: 123
我们可以看到,实现类可以直接继承父接口的默认方法,这个默认实现子类也是可以重写的。
现在抽象类和接口就更像了,那么我们来看看现在接口和抽象类的区别:
抽象类只能单继承,接口可以多现实
抽象类中可以用private、protected方法,接口不可以用
那么在接口中加入default方法有什么好处呢?
对于一些公有的方法,直接使用默认的方法,就不用在实现类中写重复代码了。
可以对代码零入侵的加入一些新的方法
相关文章推荐
- HashMap底层实现(jdk1.8)
- HashMap 在JDK1.8中的实现(与JDK1.7对比)
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Java集合源码实现三:HashMap(jdk1.8)
- jdk1.8 J.U.C之FutureTask实现机制分析
- Java中HashMap底层实现原理(JDK1.8)源码分析
- 深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上)
- 动态代理1 (JDK 需要实现接口)
- Java中HashMap底层实现原理(JDK1.8)源码分析
- Jdk1.8中的HashMap实现原理
- java invoke简单入门例子(基于JDK接口实现)
- ConcurrentHashMap源码剖析(JDK1.7实现,JDK1.8更换了实现)
- 基于JDK动态代理实现的接口链式调用(Fluent Interface)工具
- Jdk1.8中的HashMap实现原理
- 接口及默认实现
- js玩具——UI组件:ChildChangeEventListener 增删子元素事件监听器接口及默认实现
- JDK1.8的hashmap实现与JDK1.7的差别导致的一个问题
- 利用jdk1.8的新特性实现模板方法模式
- 关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.
- 基于JDK动态代理实现的接口链式调用(Fluent Interface)工具