接口中定义的静态方法和默认方法(JDK8)

175 阅读1分钟

Java8之前,接口里面的方法全部都是抽象方法,Java8(含有8)之后,以后允许在接口里面定义默认方法和静态方法了。

java8以上版本允许给接口加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做默认方法。

默认方法和抽象方法区别就是抽象方法必须要被实现,默认方法不是。作为替代方式,接口可以提供默认方法的实现,所以这个接口的实现类都可以得到默认方法。

默认方法


interface A {
    default void moren() {
        System.out.println("A.moren");
    }

    void fly();
}

class Test implements A {
    @Override
    public void moren() {
        System.out.println("我是重写的方法");
    }

    public void fly() {
        System.out.println("飞起来");
    }
}

静态方法

Java8以后,我们也可以在接口中定义静态方法的实现,这个静态方法直接从属于接口(接口也是一种类,一种特殊的类),可以通过接口名字调用;

如果子类中定义了相同的方法,那就是完全不同的方法了,直接从属于子类,可以通过子类名直接调用。

interface A {
    public static void fly() {
        System.out.println("静态方法飞起来");
    }
}

class Test implements A {
    public static void fly() {
        System.out.println("我是Test静态方法");
    }
}

接口中的默认方法可以调用静态方法;

package testduotai;

interface A {
    public static void fly() {
        System.out.println("静态方法飞起来");
    }

    default void moren() {
        fly();
    };
}

public class Animal {
    public static void main(String[] args) {
        A.fly();
    }
}