在JAVA8之前java中的接口类型旨在定义类型的接口规约,并不能拥有自己的方法实现,具体实现完全交由实现类自己完成。
在java8以后,接口中可以添加使用default或者static修饰的方法
default方法
default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。
1.实现类会继承接口中的default方法
如果接口中有default方法:
public interface demo {
public default void demoFun(){
System.out.println("我是接口");
}
}
Test类实现接口:
public class Test implements demo {
}
那么Test类将会继承接口demo 中的demoFun方法:
public class Test2 {
public static void main(String[] args) {
Test t = new Test();
t.demoFun();
}
}
2.如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法
(因为,类在继承接口中的default方法时,不知道应该继承哪一个接口中的default方法。)接口A:
public interface A {
public default void c(){
System.out.println("方法A");
}
}
接口B:
public interface B {
public default void c(){
System.out.println("方法B");
}
}
Test类:
public class Test implements A,B {
@overried
public default void c(){
System.out.println("方法A,B");
}
}
3.如果子类继承父类,父类中有b方法,该子类同时实现的接口中也有b方法(被default修饰),那么继承(extends)时覆盖了实现接口(implements)时的b()方法
接口A:
public interface A {
public default void b(){
System.out.println("A方法");
}
}
类C:
public class C {
public void b(){
System.out.println("C方法");
}
}
子类:
public class Test extends C implements A{
}
实例化:
Test test=new Test();
test.b()
输出值为:C方法
static方法
用法和普通的static方法一样。
代码示例
public interface InterfaceA {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("static方法");
}
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.show();
}
}
结果
static方法