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 }
浙公网安备 33010602011771号