一、static方法

接口中的static方法与类中的static方法很像,都是直接调用:interface名.static方法,静态方法必须写函数体,否则会报错

创建接口,定义静态方法:

public interface static_interface {
    static void print(){
        System.out.println("我是接口中的静态方法");
    }
}

实现接口并调用静态方法:

public class Test implements static_interface{

    public static void main(String[] args) {
        static_interface.print();
    }

}


二、default方法

接口中的default方法表示接口中默认的方法,必须写函数体,这种默认方法在实现类中不需要重写即可直接使用。

创建接口,定义default方法

public interface default_interface {
    default void print(){
        System.out.println("我是接口中的default方法");
    }
}

实现接口并调用default方法

public class Test2 implements default_interface{

    public static void main(String[] args) {
        new Test2().print();
    }
}


三、default的注意事项

  1. 实现类中default方法可以不重写直接使用
  2. 如果一个类同时实现了多个接口,并且这些接口中有相同的default方法,那么我们必须重写default方法才可以使用
    原理很简单,那么多相同的default方法,不重写程序怎么会知道运行哪个呢。
  3. 如果一个子类继承了父类,父类中有a()方法,同时这个子类又实现了一个接口,这个接口中也有a()方法(被default修饰),那么子类在调用a()方法的时候,会调用父类中的a()方法,而不调用接口中的a()方法
  4. 一个接口中可以写多个default



### 四、接口与抽象类区别

接口已经越来越向类靠近了,所以现在接口和抽象类的区别有:

  1. 虽然接口和抽象类都不能被实例化,但是抽象类可以有构造器,接口没有构造器
  2. 抽象类单继承(只能继承一个类),接口多继承(能继承多个接口)
  3. 抽象类中方法可以有public、protected、默认(包)甚至private范围的方法,接口只能有public范围的方法(即使是default也是public范围的)