Java8之前,接口里的方法要求全部是抽象方法。
Java8(包含8)之后,以后允许在接口里定义默认方法和静态方法。
JDK8新特性——默认方法
Java8及以上新版本,允许给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做默认方法(也称为扩展方法)。
默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是,作为替代方式,接口可以提供默认方法的实现,使用这个接口的实现类都可以得到默认方法。
public class Test{
public static void main(String[] args){
A a = new Test_A();
a.moren();
}
}
interface A{
default void moren(){
System.out.println("我是接口A中的默认方法");
}
}
class Test_A implements A{
@Override
public void moren(){
System.out.println(Test_A_moren);
}
}
JDK8新特性——静态方法
Java8以后,我们也可以在接口中直接定义静态方法的实现。这个静态方法直接从属于接口(接口也是类,一种特殊的类),可以通过接口名调用。
如果子类中定义了相同名字的静态方法,那就是完全不同的方法了,直接从属于子类,可以通过子类名直接调用。
public class Test{
public static void main(String[] args){
A.staticMethod();
Test_A_staticMethod();
}
}
interface A{
public static void staticMethod(){
System.out.println("A.staticMethod);
}
}
class Test_A implements A{
public static void staticMethod(){
System.out.println("Test_A.staticMethod");
}
}
静态方法和默认方法:
本接口的默认方法中可以调用静态方法
public class Test{
public static void main(String[] args){
A a = new Test_A();
a.moren();
}
}
interface A{
public static void staticMethod(){
System.out.println("A.staticMethod");
}
public default void moren(){
staticMethod();
System.out.println("A.moren");
}
}
class Test_A implements A{
public static void staticMethod(){
System.out.println("Test_A.staticMethod");
}
}