接口默认方法和静态方法
在JDK8以前,接口方法默认是public abstract,所有实现接口的类必须重写接口方法。 在JDK8以后,接口新增默认方法,在非必须的情况,实现类可以不用重写默认方法。 接口静态方法跟类静态方法基本用法一样,只是接口静态方法只能是public。 若接口继承了多个接口,有相同名字的默认方法/静态方法,可以指定接口名调用。
java
public class DefaultAndStaticMethodTest implements Action {
@Override
public String name() {
return "default";
}
static class OverrideAction implements Action {
@Override
public String name() {
return "override";
}
@Override
public String say() {
return "override";
}
}
public static void main(String[] args) {
assert "static".equals(Action.call());
assert "default".equals(new DefaultAndStaticMethodTest().say());
assert "override".equals(new OverrideAction().say());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
java
public interface Action {
// 名字必须重写
String name();
// 默认说话
default String say() {
return "default";
}
static String call() {
return "static";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13