JDK1.8以后的接口新增内容

在JDK1.8之前,接口中只有两部分内容:

(1)常量:固定修饰符public static  final

(2)抽象方法:固定修饰符:public abstract

在JDK1.8之后,新增非抽象方法:

(1)被public defalut修饰的非抽象方法:

注意1:defalut修饰符必须要加上,否则出错

注意2:实现类中想要重写接口中的非抽象方法,那么defalut修饰符不能写,否则出错

复制代码
 1 package com.msb5;
 2 
 3 /**
 4  * @Auther:liu
 5  * @Date:-16:24:12
 6  * @Description:IntelliJ IDEA
 7  * @Version:1.0
 8  */
 9 public interface TestInterface {
10     //常量:
11     public static final int NUM=10;
12     //抽象方法:
13     public abstract void d();
14     //被public defalut修饰的非抽象方法
15     public default void b(){
16         System.out.println("这个是TestInterface下面defalut修饰的方法体");
17     }
18 }
19 class Test implements TestInterface{
20     public  void c(){
21         //用一下接口中的b方法
22         b();//可以使用
23         //super.b();这样不可以super代表的是父类
24         TestInterface.super.b();//可以
25     }
26     @Override
27     public void d() {
28         System.out.println("实现接口中d抽象方法的重写");
29     }
30 
31     @Override
32     public void b() {
33             }
34 }
复制代码

 

(2)静态方法:

注意1:static不能省略不写

注意2:静态方法不能重写

复制代码
 1 package com.msb5;
 2 
 3 /**
 4  * @Auther:liu
 5  * @Date:-16:48:03
 6  * @Description:IntelliJ IDEA
 7  * @Version:1.0
 8  */
 9 public interface TestInterface2 {
10     //常量:
11     public static final int NUM=11;
12     //抽象方法
13     public abstract void a();
14     //public default非抽象方法
15     public default void b(){
16         System.out.println("-----TestInterface2---b");
17     }
18     //静态方法
19     public static void c(){
20         System.out.println("TestInterface2中的静态方法");
21     }
22 }
23 class Demo implements TestInterface2{
24     @Override
25     public void a() {
26         System.out.println("重写a方法");
27     }
28     public static void c(){
29         System.out.println("Demo中的静态方法");
30     }
31 }
32 class a{
33     //这是一个main方法:是程序的入口
34     public static void main(String[] args) {
35         Demo d=new Demo();
36         d.c();
37         TestInterface2.c();
38     }
39 }
复制代码

疑问:为什么要在接口中加入非抽象方法?

如果接口中只能定义抽象方法的话,那么我要是修改接口中的内容,那么对实现类的影响太大了,所以实现类都会受到影响。

现在在接口中加入非抽象方法,对实现类没有影响,想调用就去调用即可。

复制代码
 1 package com.msb6;
 2 
 3 /**
 4  * @Auther:liu
 5  * @Date:-17:00:00
 6  * @Description:IntelliJ IDEA
 7  * @Version:1.0
 8  */
 9 public interface TestInterface {
10     public abstract void a();
11     public abstract void b();
12     public default void c(){
13         
14     }
15 }
16 class Test01 implements TestInterface{
17     @Override
18     public void a() {
19 
20     }
21 
22     @Override
23     public void b() {
24 
25     }
26 }
27 class Test02 implements TestInterface{
28     @Override
29     public void a() {
30 
31     }
32     @Override
33     public void b() {
34 
35     }
36 }
复制代码

 

posted @   爱的加勒比  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示