在java类中实现不同接口的同名方法时,该方法属于哪个接口?

存在这样一种情况,有一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的该实现方法属于哪个接口的呢?

public interface InterfaceA {
  void method();
  void methodA();
}

public interface InterfaceB {
  void method();
  void methodB();
}

public class Subject implements InterfaceA, InterfaceB {

  @Override
  public void method() {

  }

  @Override
  public void methodB() {

  }

  @Override
  public void methodA() {

  }
}

Subject类实现了InterfaceA和InterfaceB两个接口的方法,其中method是InterfaceA和InterfaceB共用的相同方法,那么Subject类中实现的该方法是属于哪个接口的呢?

答案是既是InterfaceA的也是InterfaceB的,什么意思?就是说此时的Subject类你既可以把它当做InterfaceA来使用其中的method方法,也可以把它当做InterfaceB来使用其中的method方法。

Java对于implements的要求是只要在接口中声明的方法,在实现类中必须要实现它,单看Subject 类,它里面具有method和methodA两个方法,因此它就是实现了InterfaceA接口所有方法的实现类,同时它里面具有method和methodB两个方法,因此它也是实现了InterfaceB接口所有方法的实现类。

因此,在使用Subject 类的时候,如果你认为它是InterfaceA,那它就是InterfaceA,如果你为它是InterfaceB,那它就是InterfaceB。

所以可以像下面这样去使用它,完全没有问题:

public class Main {

  public static void main(String[] args) {
    //我现在认为它是一个InterfaceA实现类, 就把它当做一个InterfaceA接口来使用
    InterfaceA interfaceA = new Subject();
    interfaceA.method();
    interfaceA.methodA();

    test(interfaceA);

    //我现在认为它是一个InterfaceB实现类, 就把它当做一个InterfaceB接口来使用
    InterfaceB interfaceB = new Subject();
    interfaceB.method();
    interfaceB.methodB();

    //下面都是完全没问题的
    Subject subject = new Subject();
    subject.myMethod();
    //当成InterfaceA用
    interfaceA = subject;
    interfaceA.method();
    interfaceA.methodA();
    //当成InterfaceA用的过程中又可以当成InterfaceB用
    interfaceB = subject;
    interfaceB.method();
    interfaceB.methodB();
    //当成InterfaceB用的过程中又可以再当成InterfaceA用
    interfaceA = (InterfaceA) interfaceB;
    interfaceA.method();
    interfaceA.methodA();
    //...随便用...
  }

  private static void test(InterfaceA interfaceA){
    //如果我知道InterfaceA的实现类同时也implements了InterfaceB
    // 那么我就可以把它当做InterfaceB的实现类来使用
    InterfaceB interfaceB = (InterfaceB) interfaceA;
    interfaceB.method();
    interfaceB.methodB();
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值