JDK8开始之后接口新增的方法
JDK7以前:接口中只能定义抽象方法
JDK8的新特性:接口中可以定义有方法体的方法(默认、静态)
JDK9的新特性:接口中可以定义私有方法
接口中的默认方法 InterA
package com.itheima.a06;
public interface InterA {
// 抽象方法 不能拥有方法体
public abstract void show();
// public 可以省略 default不可以省略
public default void print() {
System.out.println("A接口中的默认方法---print");
}
}
InterB
package com.itheima.a06;
public interface InterB {
// 抽象方法 不能拥有方法体
public abstract void show();
// public 可以省略 default不可以省略
public default void print() {
System.out.println("B接口中的默认方法---print");
}
}
intermpl
package com.itheima.a06;
public class intermpl implements InterA,InterB {
@Override
public void show() {
System.out.println("实现类 重写的抽象方法");
}
// 默认方法不是抽象方法 不强制重写 如果重写 去掉default关键字
// 实现多个接口 多个接口存在相同名字的默认方法,子类就必须对该方法重写
@Override
public void print() {
System.out.println("重写接口中的默认方法");
}
}
Test
package com.itheima.a06;
public class Test {
public static void main(String[] args) {
intermpl ii=new intermpl();
ii.show();
ii.print();
}
}
JDK8以后新增的静态方法
Inter
package com.itheima.a07;
public interface Inter {
public abstract void method();
// 静态方法不能被重写
public static void show(){
System.out.println("Inter方法中的静态方法");
};
}
InterImpl
package com.itheima.a07;
public class InterImpl implements Inter {
@Override
public void method() {
System.out.println("InterImpl中重写的抽象方法");
}
// 不叫重写
public static void show(){
System.out.println("InterImpl方法中的静态方法");
};
}
Test
package com.itheima.a07;
public class Test {
public static void main(String[] args) {
// 调用接口中的静态方法
Inter.show();
// 调用实现类中的静态方法
InterImpl.show();
}
}
JDK9以后的私有方法
InterA
package com.itheima.a08;
public interface InterA {
public default void show1(){
System.out.println("show1方法执行");
show3();
};
public default void show2(){
System.out.println("show2方法执行");
show3();
};
//普通私有方法,给默认方法服务
private void show3(){
System.out.println("记录细节的代码");
};
public static void show11(){
System.out.println("show1方法执行");
show4();
};
public static void show22(){
System.out.println("show2方法执行");
show4();
};
//静态私有方法,给静态方法服务
private static void show4(){
System.out.println("记录细节的代码");
};
}
总结