【问题标题】:java8 Interface allowing public default methodjava8接口允许公共默认方法
【发布时间】:2016-09-06 09:07:43
【问题描述】:
在 java 8 中,默认方法实现可以同时采用 public 和 default 修饰符。
以下两种方法的主要区别是什么。在什么条件下需要遵循哪种类型。
default int makeMul(int x, int y) {
return x * y;
}
public default int makeMul(int x, int y) {
return x * y;
}
【问题讨论】:
标签:
java
java-8
access-modifiers
default-method
【解决方案1】:
这里的默认方法没有什么特别之处。 Java 一直允许将接口方法声明为 public,即使它们已经隐式地公开了。
来自JLS 9.4:
接口主体中的每个方法声明都是隐式公共的(第 6.6 节)。允许但不鼓励在接口中为方法声明冗余指定 public 修饰符。
【解决方案2】:
正如其他人所建议的,default 关键字有两个主要用途:
- 在 Java 8 之前,它只能用于触发
switch-case 语句中的默认情况。
- 从 Java 8 开始,开发人员可以在接口内部提供已实现的方法(这在以前是不可能的),在方法的声明中使用
default 关键字 (public default int method())。
据我了解,在简单类中在方法声明中使用default关键字根本没有任何区别。
有关接口中default 方法的用途的广泛讨论,请参阅Purpose of Default or Defender methods in Java 8