JDK8.0接口中的默认方法和静态方法

Posted on 2018-09-12 22:07  豆豆2018  阅读(259)  评论(0编辑  收藏  举报

我们在接口中通常定义的方法是抽象方法,即没有方法体,只有返回值类型和方法名:(public abstract) void Method();

类在实现接口的时候必须重写抽象方法才可以

jdk8中新加的默认方法和静态方法是什么呢?

可以通俗理解:静态方法属于类,调用静态方法通过接口名曲调用它,默认方法在实现类中可以重写,可以不重写

;默认方法,在接口中定义,区别抽象方法,有方法体
public interface DefaultStaticInterface {
    //普通方法,类实现接口必须重写它
    abstract void Method();

    //默认方法在类实现接口时候可以不重写,也可以重写
    public default void defaultMethod() {
        System.out.println("这是接口定义的默认方法,实现接口可以不重写他");
    }

    ;

    //静态方法是属于接口的,调用它必须用接口调用
    public static void staticMethod() {
        System.out.println("这是接口的静态方法");
    }

    ;

}
//探索静态方法 默认方法是否可以被继承
interface ExtendInterface extends DefaultStaticInterface{
    void speak();
}

class Test implements DefaultStaticInterface {
    @Override
    public void Method() {
        System.out.println("重写了类中定义的抽象方法Method");
    }

    @Override
    public void defaultMethod() {
        System.out.println("这里选择性的重写了了接口中的默认方法defaultMethod()");
    }

    //静态方法,通过接口定义
    public static void main(String[] args) {
        //静态方法的调用
        DefaultStaticInterface.staticMethod();
        Test test = new Test();
        test.Method();
        test.defaultMethod();
    }
}
class Test01 implements ExtendInterface{
    @Override
    public void speak() {
        System.out.println("重写speak方法");
    }

    @Override
    public void Method() {
        System.out.println("重写父类中的抽象方法");
    }

    @Override
    public void defaultMethod() {
        System.out.println("重写父类接口中的默认方法");
    }
    //可以知道,子类接口中的默认方法是可以继承的,但是静态方法始终是属于父类接口的,通过父类接口调用
    public static void main(String[] args) {
        Test01 test01=new Test01();
        test01.Method();
        test01.defaultMethod();
        DefaultStaticInterface.staticMethod();
        
    }
}