default 给接口添加默认方法

1.default关键字

接口在定义好后无法添加新的方法,否则实现类都需要重新实现一遍,但是jdk8以后,可以通过default关键字来给接口增加新的方法而不变动实现类.

public interface AnInterface {
    void firstMethod();
    void secondMethod();
    default void newMethod() {
        System.out.println("newMethod");
    }
}
public class AnImplementation implements AnInterface {

    @Override
    public void firstMethod() {
        System.out.println("firstMethod");
    }

    @Override
    public void secondMethod() {
        System.out.println("secondMethod");
    }
    
    public static void main(String[] args) {
        AnInterface i =  new AnImplementation();
        i.firstMethod();
        i.secondMethod();
        i.newMethod();
    }

}

可以看到 newMethod可以正常工作.

2.多重实现下同名解决办法

问题: java是单继承,但是可以实现多个接口,如果default标记的方法冲突怎么办?

public interface AnInterface {
    void firstMethod();
     void secondMethod();
    default  void newMethod() {
        System.out.println(" ");
    }
}
public interface AnInterface2 {
    void firstMethod();
     void secondMethod();
    default  void newMethod() {
        System.out.println(" ");
    }
}

 

 我们可以看到报错了,因为实现类无法判断newMethod属于哪一个接口.

解决:

我们可以重写newMethod()方法解决即可.

 3. private关键字

JDK9以后,接口可以定义private方法,如果定义了private方法,会自己把方法加上default关键字,不需要显示定义.

public interface JDK9 {
    private void fd() {
        System.out.println("fd()");
    }
    private static void fs() {
        System.out.println("fs()");
    }
    default void f() {
        fd();
    }
    static void g() {
        fs();
    }
}

我们可以看到,加上private关键字以后,fd和fs方法可以像加上default关键字一样加上方法体.

 

posted @ 2022-10-20 22:37  随意的马蒂洛克  阅读(80)  评论(0编辑  收藏  举报