Java-面向对象_接口(JDK1.8之后新增)
在JDK1.8之前,接口中只有两部分内容:
(1)常量:固定修饰符:public static final
(2)抽象方法:固定修饰符:public abstract
在JDK1.8之后,新增非抽象方法:
(1)在public default修饰的非抽象方法:
注意1:default修饰符必须要加上,否则出错
注意2:实现类要是想重写接口中的非抽象方法,那么default修饰符必须不能加,否则出错
public interface TestInterface { /*public static final*/ int Num = 19; /*public abstract*/ void a(); default void b() { } } class Test implements TestInterface{ @Override public void a() { System.out.println("重写了a方法") } public void b() { } public void c() { //用一下接口的b方法: b();//可以 //super.b(); 不可以 TestInterface.super.b(); } }
(2)静态方法:
注意1:static不可以省略不写
注意2:静态方法不能重写
public interface TestInterface2 { //常量: public static final int Num = 10; //抽象方法: public abstract void a(); //public default非抽象方法: public default void c() { System.out.println("TestInterface2中default方法"); } //静态方法: public static void d() { System.out.println("TestInterface2中的静态方法"); } } class Demo implements TestInterface2{ @Override public void a() { System.out.println("重写了a方法"); } public static void d() { System.out.println("Demo中的静态方法"); } } class A{ public static void main(String[] args) { Demo demo = new Demo(); demo.d(); Demo.d(); TestInterface2.d(); } }
疑问:为什么要在接口中加入非抽象方法???
如果接口中只能定义抽象方法的话,那么我要是修改接口中的内容,那么对实现类的影响太大了,所有实现类都会受到影响。
现在在接口中加入非抽象方法,对实现类没有影响,想调用就去调用即可。