27、接口中的方法重名问题以及接口的多继承

本文详细介绍了Java接口的使用,包括接口不包含静态代码块和构造方法、一个类可实现多个接口、接口中抽象方法的重写以及默认方法的处理。特别强调了当接口间的默认方法冲突时,实现类需要覆盖重写,并给出了类与接口、接口与接口继承的实例。还提到了父类方法与接口默认方法冲突时的优先级。最后,讨论了接口间的多继承特性及注意事项。
摘要由CSDN通过智能技术生成

接口使用的注意事项及其重要特点:

使用接口时,应注意

  1. 接口时没有静态代码块或者构造方法的。
public interface MyInterface {
    static{
        
    }
    
    public MyInterface(){
        
    }
}
//此乃错误写法
  1. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
public class  MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{
    //覆盖重写所有抽象方法
}
  1. 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖一次即可。
  2. 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
  3. 如果实现类实现的多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
接口A:
public interface MyInterfaceA {
    public abstract void methodA();
    public abstract void methodAbs();
    public default void methodDefault(){
        System.out.println("默认方法AAA");
    }
}

接口B:
public interface MyInterfaceB {
    public abstract void methodB();
    public abstract void methodAbs();
    public default void methodDefault(){
        System.out.println("默认方法AAA");
    }
}

实现类:
//一个类可以同时实现多个接口
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{

    @Override
    public void methodA() {
        System.out.println("覆盖重写了A方法");
    }
    
    @Override
    public void methodB() {
        System.out.println("覆盖重写了B方法");
    }

    @Override//接口抽象方法重名问题
    public void methodAbs() {
        System.out.println("覆盖重写了AB接口都有的抽象方法");
    }

    @Override//接口默认方法重名问题
    public void methodDefault() {
        System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写");
    }

}
  1. 如果一个类直接父类中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。
父类:
public class Demo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.method();
    }
}

接口:
public interface MyInterface {

    public default void method(){
        System.out.println("接口的默认方法");
    }
}

子类:
public class Zi extends Fu implements MyInterface{
}

主函数调用:
public interface MyInterface {

    public default void method(){
        System.out.println("接口的默认方法");
    }
}

输出结果

父类方法

接口之间的多继承

  1. 类与类之间是单继承的,直接父类只有一个。
  2. 类与接口之间是多实现的,一个类可以实现多个接口。
  3. 接口与接口之间是多继承的。

注意事项

  1. 多个父接口当中的抽象方法如果重复,没关系。
  2. 多个父类接口当中的默认方法如果重复,那么子接口必须对默认方法进行覆盖重写,【而且带着default关键字】。
接口A:
public interface MyInterfaceA {
    public abstract void methodA();

    public abstract void methodCommon();

    public default void methodDefault(){
        System.out.println("AAA");
    }
}

接口B:
public interface MyInterfaceB {
    public abstract void methodB();

    public abstract void methodCommon();

    public default void methodDefault(){
        System.out.println("BBB");
    }
}

子接口:(继承了接口A、B)
/*
这个子接口当中有5个方法:
    1.methodA来源于接口A
    2.methodB来源于接口B
    3.methodCommon同时来源于接口A和B
    4.method来源于自己
    5.默认方法methodDefault产生冲突,子方法必须进行默认方法覆盖重写
 */
public interface MyInterface extends MyInterfaceA,MyInterfaceB{

    public abstract void method();

    public abstract void methodCommon();

    @Override
    default void methodDefault() {

    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值