关于接口的新特性,可以为接口添加静态方法和默认方法
/** * 在Jdk8中关于接口的新特性,可以为接口添加静态方法和默认方法 */ public class interfaceTest2 { public static void main(String[] args) {
Subclass s = new Subclass();
//知识点1:接口中定义的【静态方法】只能通过接口来调用 //s.method1();//无法调用 CompareA.method1();//可以调用 //知识点2:通过实现类的对象,可以调用接口中的默认方法 //如果实现类重写了接口中的默认方法,调用时,执行的是重新后的方法 s.method2();
//知识点3:如果子类(实现类)继承的父类,和实现的接口中声明了同名同参数的方法, //那么,子类在没有重写次方法情况下,默认调用的是父类中的同名同参数方法--->类优先原则 s.method3();
//知识点4:如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法, //那么在实现类没有重写次方法的情况下,报错-------->接口冲突 //这就需要我们在实现类中重写此方法,重写后自然调用的是实现类重写后的方法 } } interface CompareA { //静态方法 public static void method1(){ System.out.println("CompareA: 北京"); } //默认方法 public default void method2(){ System.out.println("CompareA: 上海"); } default void method3(){ System.out.println("CompareA: 杭州"); } } class Subclass extends Superclass implements CompareA{ @Override public void method2(){ System.out.println("Subclass: 上海"); } } class Superclass { public void method3(){ System.out.println("Superclass:杭州"); } }
接口新特性的应用
public class InterfaceTest3 { public static void main(String[] args) { Man man = new Man(); man.help(); } } interface Filial { //孝顺的 default void help(){ System.out.println("老妈。我来救你了"); } } interface Spoony { //痴情的 default void help(){ System.out.println("媳妇。我来救你了"); } } class Father{ public void help(){ System.out.println("儿子。救我媳妇"); } } class Man extends Father implements Filial,Spoony{ @Override public void help() { System.out.println("我该救谁呢"); super.help(); //调用接口中声明的同名同参数的方法 Spoony.super.help(); Filial.super.help(); } }