- 在 Java 8 之前,接口中只允许有抽象方法和常量,而实现该接口的类必须得实现该接口所有的抽象方法,但是从 Java 8 开始,接口中允许有 default 声明的具体实现方法
- 其次,Java 8 开始接口中也允许定义 static 方法
1.引入 default 关键字的缘由
在Java 8 中,每种集合都有获取Stream对象的方法-stream(),按照设计理念,stream()方法在集合接口Collection中声明,但是这样的话,后续Collection的实现类都得实现该方法,对现有的架构改动重大
由此,我们引入了 default 关键字,可以直接声明该方法的具体实现,然后所有后续该接口的实现类即可直接继承该方法,无需重写,例如 Collection 中的 stream 方法:
public interface Collection<E> extends Iterable<E>{
default Stream<E> stream(){
// ToDo
System.out.println("Hello,World!!!")
}
}
2.default关键字作用
default 是 Java8 新增的一个关键字,该关键字使用在接口当中的一个方法之前,被default声明的方法称为默认方法,该方法可以在接口中给出具体实现。从而使得该接口的实现类默认继承该方法,无需重新实现。
3.默认方法的使用
用以下代码来演示:
public class TestDefault implements MyInterface {
@Override
public int size() {
// TODO Auto-generated method stub
return 1;
}
public static void main(String[] args) {
TestDefault testDefault = new TestDefault();
MyInterface.getInfo(testDefault.size(), testDefault.isEmpty());
}
}
// 函数式接口
interface MyInterface {
// 抽象方法
int size();
// 默认方法
default boolean isEmpty () {
return size() == 0;
}
// 静态方法
static void getInfo(int size, boolean isEmpty) {
System.out.println("size is " + size + ", empty: " + isEmpty);
}
}
打印结果如下:
size is 1,empty:false
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...