Java 8 - 接口的静态方法
2018年2月25日
Java interface 里可以定义变量和方法,变量必须并且默认是 public static final,方法必须并且默认是 public abstract。Java 8 interface 中除了引入了默认方法外,还引入了静态方法。类似于默认方法,在接口中定义静态方法只需要在方法前加入 static 关键字。
1 | public interface InterfaceE{ |
特点
- 接口中的静态方法只能通过接口本身去调用,类似于 Class 中的静态方法,因此也没有默认方法中的多继承问题;
- 接口中的静态方法并不能在实现类中被覆写,实现类中可以声明相同的方法,但这两个方法之间除了名字相同,并没有 Override 关系。
1
2
3
4
5
6
7
8
9
10
11//调用
public void t2(){
InterfaceE.func();
}
//无法被 Override
public class ClassE implements InterfaceE{
public static void func(){
System.out.println("CE");
}
}
优点
静态方法以及默认方法的引入允许我们在接口中直接实现公有方法,带来了如下的好处:
- 减少额外的工具类的创建
- 避免创建基类
- 更好地支持集合的 API 在 lambda 表达式中应用
注意
接口中的静态方法和默认方法不能和所有对象的基类 Object 中的方法同名,即这两种方法不能提供 Object 中的方法的实现。原因:1.保持继承模型的简单性;2.接口本身是无状态的,而 Object 中的 equals/hashCode/toString 方法依赖于对象的状态;3.允许对这些方法的实现可能会带来潜在的不可预知的表现。