我是靠谱客的博主 乐观石头,这篇文章主要介绍JAVA8 新特性 接口中的静态方法和默认方法,现在分享给大家,希望可以做个参考。

JAVA8中关于接口的新特性,之后还有关于Lambda表达式的函数式接口

接口中的静态方法和默认方法

Java8接口新增默认方法与静态方法

java8之前接口中属性是静态常量,方法都是抽象方法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package 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
33
package 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
27
package 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
29
package 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部