一、接口的默认方法
情况1:正常使用
public interface A{
default void func() {
System.out.println("A's");
}
static void staticFunc() {
System.out.println("staticFunc");
}
}
public class B implements A{
public static void main(String[] args) {
B b=new B();
b.func();
A.staticFunc();
}
}
//println:
//A's
//staticFunc
在Java8之前,如果要为一个接口增加新的方法,则实现该接口的所有类都需要将这个方法实现。增加了默认方法,有利于代码的拓展性,减少对原代码的改动。
接口中也可以定义成员变量,只能是常量。默认修饰符 public static final
在1.8之前接口中不可以有静态方法。
情况2:当父类中有与实现接口中相同方法,则执行父类中的方法
public class C implements A{
public void func() {
System.out.println("C's");
}
}
public class B extends C implements A{
public static void main(String[] args) {
B b=new B();
b.func();
}
}
//println:C's
extends , implements 的书写顺序不能改变。
情况3:实现2个接口,接口中有相同的方法。(编译就不通过)
public interface A {
default void run() {
System.out.println("A run ");
}
}
public interface B {
default void run() {
System.out.println("B run ");
}
}
public class C implements A, B {
public static void main(String[] args) {
C c=new C();
c.run();
}
}
子类必须进行重写,否则编译就不过。