除了定义全局常量static final
public interface CompareA {
public static void method1() {
System.out.println("CompareA:北京");
}
}
和抽象方法abstract之外,还可以定义静态方法、默认方法
public interface CompareA {
// 静态方法
public static void method1() {
System.out.println("CompareA:北京");
}
//默认方法
public default void method2() {
System.out.println("CompareA:上海");
}
//默认方法
default void method3() {
System.out.println("CompareA:广州");
}
}
接口中定义的静态方法,只能通过接口来调用。即接口中的静态方法根本不是想让实现类去继承,只是想让接口自己用。
public class SubclassTest {
public static void main(String[] args) {
Subclass s = new Subclass();
CompareA.method1();
// s.method1();
}
}
class Subclass implements CompareA {
}
通过实现类的对象,可以调用接口中的默认方法(如果实现类重写了接口中的默认方法,任然调用的是重写过的默认方法)
public class SubclassTest {
public static void main(String[] args) {
Subclass s = new Subclass();
// CompareA.method1();
s.method2();
s.method3();
}
}
class Subclass implements CompareA {
}
规定了:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写的情况下,调用的是父类同名同参数的方法-->类优先原则
如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法 -->接口冲突报错
这就需要我们必须在实现类中重写此方法
调用接口中的默认方法(非静态方法) :在接口和方法间加关键字super即可
compareA.super.method3