1、JDK8之前,接口中的方法不能有方法体,而JDK8后,接口中的方法是可以包含方法体的。

        接口中的方法不论哪种类型其默认修饰符都为public,可写可不写

        接口抽象方法的访问修饰符全部是:public abstract,可写可不写

        JDK8接口新增 default、static函数修饰符

java接口方法有以下三种

实现类使用implements 实现父接口即可继承该方法,子接口可重写该方法),该特性是JDK8以后被提出;
        静态方法:接口中的静态方法和普通类中的一样,是拥有方法体的,静态方法不需要实例化,而接口本身就不支持实例化,从这点来看,静态方法和接口在一起似乎很配;java中的静态属性和静态方法是可以被继承的,但是不能被子类重写且全部被隐藏。该特性是JDK8以后被提出;

        抽象方法:JDK8之前, 接口抽象方法的访问修饰符全部是:public abstract。

例子:

创建接口ABC:

public interface ABC {

    // 普通方法
    default String A() {
        return "hello A";
    }
    
    // 静态方法
    static String B() {
        return "hello B";
    }
    
    // 抽象方法
    String C();

}

实现接口:

public class ABCImpl implements ABC {

    // 重写了父类方法
    @Override
    public String A() {
        return "ABCImpl hello A";
    }

    @Override
    public String C() {
        return "hello C";
    }

    public static void main(String[] args) {
        ABCImpl abc = new ABCImpl();
        System.out.println(abc.A());
        System.out.println(ABC.B());
        System.out.println(abc.C());
    }

}

代码结果:

ABCImpl hello A
hello B
hello C

接口为什么要有默认(普通)方法?

        接口在后期升级维护中避免不了修改,在 Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现类都要去实现这个方法,不然就会编译错误,而某些实现类根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。

        所以,接口默认方法就是为了解决这个问题,只要在一个接口添加了一个默认方法,所有的实现类就自动继承,不需要改动任何实现类,也不会影响业务。

        另外,接口默认方法可以被接口实现类重写。

2、