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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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搭建本