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
}
}


![【C++入门到精通】 原子性操作库(atomic) C++11 [ C++入门 ]](https://img-blog.csdnimg.cn/direct/2b8dd8add78842b5aadcc661e9255f47.png#pic_center)

















