JAVA8中关于接口的新特性,之后还有关于Lambda表达式的函数式接口
接口中的静态方法和默认方法
Java8接口新增默认方法与静态方法
java8之前接口中属性是静态常量,方法都是抽象方法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package Chating; public class Jie { public static void main(String[] args) { } } interface AA{ int a = 1;//静态常量 void show();//抽象方法 //在接口中可以定义静态方法和默认方法 public static void print() { System.out.println("接口中的静态方法"); } public default void def() { System.out.println("接口中的默认方法"); } }
default默认方法
缘由:假设要给接口增加方法,如果是抽象方法,那一些已运行的项目就会编译出错(必须实现所有抽象方法)都需要改动,为了解决这个问题。就出现了默认方法,被default修饰的方法,不会被强制要求重写。能让我们更好的扩展新的类功能。
default特点
- 默认方法可以直接调用,可以不用在实现类中实现
- 一类实现多接口,而多接口中存在重名默认方法,则才必须对重名的默认方法实现
重名默认方法实现
-
可以自己去实现重名的方法
-
可以指明用哪个接口的方法
格式:接口名.super.默认方法名();
default类优先原则
实现类同时继承的父类和实现的接口中有重名的方法,这时要遵循类优先原则
即 默认是用父类中方法的实现
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package Chating; public class Jie { public static void main(String[] args) { Stu pp = new Stu(); pp.def();//用实现类调用方法 System.out.println("---------------"); new Stu().def();//用匿名的调用也可 } } interface AA{ public static void print() { System.out.println("接口AA中的静态方法"); } public default void def() { System.out.println("接口AA中的默认方法"); } } interface BB{ public default void def() { System.out.println("接口BB中的默认方法"); } } class Stu implements AA,BB{ @Override public void def() {//可以自己为重名的方法提供实现 System.out.println("重改后的def方法"); AA.super.def();//可以指定哪个接口中的方法 } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27package Chating; public class Jie { public static void main(String[] args) { Stu stu = new Stu(); stu.def(); } } interface AA{ public default void def() { System.out.println("接口AA中的默认方法"); } } interface BB{ public default void def() { System.out.println("接口BB中的默认方法"); } } class Fu1{ public void def() { System.out.println("父类Fu1中的def方法"); } } class Stu extends Fu1 implements AA,BB{ //两个接口和父类中都有重名方法,采用类优先的原则。默认调用类中的方法 }
static静态方法
缘由:一个类实现多接口,而多个接口中有重名的静态方法就很难区分,因此接口中的静态方法不会继承给实现类,可以直接调用。
格式:接口名.静态方法名() 调用静态方法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29package Chating; public class Jie { public static void main(String[] args) { //通过接口名.静态方法名() 调用静态方法 BB.def(); AA.def(); CC.def(); } } interface AA{ public static void def() { System.out.println("接口AA中的静态方法"); } } interface BB{ public static void def() { System.out.println("接口BB中的静态方法"); } } interface CC{ public static void def() { System.out.println("接口CC中的静态方法"); } } class Stu implements AA,BB,CC{ //多个接口中有重名的静态方法 }
最后
以上就是乐观石头最近收集整理的关于JAVA8 新特性 接口中的静态方法和默认方法的全部内容,更多相关JAVA8内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复