java 接口默认方法冲突等问题 基础基础基础
子接口覆盖父接口的默认方法
package com.book;
interface AA{
public abstract void print();
public default void ID(){
System.out.println("AA");
}
}
interface BB extends AA{ //接口BB继承AA
@Override
public default void ID(){
System.out.println("BB");
}
}
public class Test3 implements AA,BB{
@Override
public void print(){
System.out.println("print - AA");
}
public static void main(String args[]){
Test3 t = new Test3();
t.print(); //print - AA
t.ID(); //BB 子接口覆盖了父接口的默认方法,可以加上@Override
}
}
类优先原则
package com.book;
interface AA{
public abstract void print();
public default void ID(){
System.out.println("AA");
}
}
interface BB extends AA{ //接口BB继承AA
@Override
public default void ID(){
System.out.println("BB");
}
}
class CC{
public void ID(){
System.out.println("CC"); //类中的ID方法
}
}
public class Test3 extends CC implements AA,BB{
@Override
public void print(){
System.out.println("print - AA");
}
public static void main(String args[]){
Test3 t = new Test3();
t.print(); //print - AA
t.ID(); //CC 类优先
}
}
委托接口
package com.book;
interface AA{
public abstract void print();
public default void ID(){ //AA的默认方法
System.out.println("AA");
}
}
interface BB{
public default void ID(){
System.out.println("BB"); //BB也有默认方法
}
}
public class Test3 implements AA,BB{
@Override
public void print(){
System.out.println("print - AA");
}
//需要覆盖,两种方式,自己写,或者委托其中一个父类,如AA
@Override
public void ID(){
AA.super.ID(); //委托AA
}
public static void main(String args[]){
Test3 t = new Test3();
t.print(); //print - AA
t.ID(); //AA
}
}