【问题标题】:Child interface with same method than parent与父接口具有相同方法的子接口
【发布时间】:2020-01-25 15:36:44
【问题描述】:

如果接口 B 扩展接口 A,并提供与接口 A 相同的方法,是否意味着该方法覆盖了另一个方法?

编辑:将implements这个词改为extend,因为这是错误的,实际上并不是要写implements hehe...

我在考试中找到的这个示例代码的目的是了解接口之间的扩展是如何工作的,这里要求的是提供 ConcreteClass 的主体,特别是类必须实现哪些方法:解决方案在类的主体,但我不明白的是Interface_Y中的methodY(String z)会发生什么,它是否被Interface_Z中的methodX(String x)覆盖,不应该methodY(String z)也在ConcreteClass 必须实现的方法列表,或者方法名称是否与被覆盖的可能性无关?

interface Interface_X{
    public int methodX(int x);
}

interface Interface_Y extends Interface_X{
    public void methodY(String z);
    public int methodX(int y);
}

interface Interface_Z extends Interface_X{
    public void methodX(String x);
    public int methodX(int y);
}

abstract class AbstractClass implements Interface_Z, Runnable{
    public abstract int methodX();
    public int methodX(int c) {
        return 0;    
    } 
}

public class ConcreteClass extends AbstractClass{

    @Override
    public void run(){

    }

    @Override
    public int methodX(){
        return 0;
    }

    @Override
    public void methodX(String z){

    }
}

【问题讨论】:

  • 覆盖,而不是覆盖。但是,是的。新的覆盖旧的。
  • 作为一个小提示。一个接口不能实现另一个接口,你的意思是extend
  • "但我不明白Interface_Y 中的methodY(String z) 会发生什么,它会被Interface_Z 中的methodX(String x) 覆盖" - 这是两种不同的方法,都不会覆盖另一个。为了覆盖方法,签名(即名称和参数类型)必须相等。 --- 代码备注:在Java中,class-enum-和interface-names写在UpperCamelCase(Interface_X -> InterfaceX`)
  • 看看@khachik 的回答,这解释了原因。
  • @DA 因为as explained by khachikConcreteClass 没有实现Interface_Y

标签: java interface abstract-class


【解决方案1】:

但我不明白的是方法Y(String z)会发生什么

没有任何反应,因为该方法所属的Interface_Y 不在ConcreteClass 的类型层次结构中。

        Interface_X 
       /           \             Runnable
Interface_Y   Interface_Z           /
                     \             /
                AbstractClass     /
                       \         /
                      ConcreteClass

【讨论】:

    【解决方案2】:

    接口只是合约或骨架。请看这个。 https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

    首先:接口永远不会实现接口。它总是扩展它。

    如果一个非抽象类实现了两个具有相同签名的方法的接口。它必须通过合同给出相同的实现。否则编译器会报错。

    回答您的问题? Interface_Y的methodY会发生什么?

    实现此接口的任何非抽象类都需要提供实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 2013-10-31
      • 2011-11-23
      • 2020-12-09
      • 2013-07-03
      • 2017-01-19
      • 2012-01-29
      • 2014-07-14
      相关资源
      最近更新 更多