Java中接口的新特性,为接口添加静态方法和默认方法

 关于接口的新特性,可以为接口添加静态方法和默认方法

/**
 * 在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();  
    }
}