Java8-接口的改变

jdk8出现的一个新特性–接口的增强。此次变化中,接口中某些方法也可以有方法体了。jdk8对于接口的设计,除了保留之前的版本记本特性外,还提供了两个新的功能。除了抽象方法外,还可以有默认方法(default方法)和静态方法(static方法),此两个方法都可以拥有方法体

  1. 接口中允许有默认实现,使用 default 关键字声明,可以被覆写.必须创建实例调用

    类优先规则:如果同时继承一个类 ,实现一个接口,接口中的默认方法和父类中的方法一样,则“接口中的默认方法会被忽略”

1
2
3
4
5
public interface MyInterface {
default String get(){
return "MyInterface";
}
}
1
2
3
4
5
public interface MyFun {
default String get(){
return "MyFun";
}
}
1
2
3
4
5
public class SubClass {
public String get() {
return "SubClass";
}
}
1
2
3
4
5
6
public class MyClass extends SubClass implements MyInterface {
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.println(myClass.get());//输出SubClass
}
}

接口冲突。如果一个父接口提供一个默认方法,而另一个接口也是提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突

1
2
3
4
5
6
7
8
9
public class MyClass /*extends SubClass*/ implements MyInterface, MyFun {

@Override
public String get() {
return MyInterface.super.get();
// 或return MyFun.super.get();
// 或自己实现
}
}
  1. 接口中运行有静态方法,直接类名调用,不需要实例
1
2
3
4
5
6
7
8
9
public interface MyInterface {
default String get(){
return "MyInterface";
}

static void show(){
System.out.println("接口中的静态方法");
}
}
1
MyInterface.show(); //接口中的静态方法
0%