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、