当我们在类中定义接口的抽象方法时,我们是“覆盖”或“实现”还是简单地说“定义”那些方法?

时间:2018-07-07 18:09:27

标签: java interface

B类中的show()方法是“重写”,“实现”还是只是“定义”?

interface A
{
    void show();
}

class B implements A
{
    public void show()
    {
        System.out.println("What is the proper term to explain?");
    }
}

4 个答案:

答案 0 :(得分:1)

一个简短的答案,我们override这些方法,为什么?

因为这代表了多态语句的概念,请记住

List<String> aa = new ArrayList<>();
// List => interface
// ArrayList => class
aa.add("polymorphic statment");

多态语句和覆盖是相辅相成的。

尽管任何类还可以通过声明abstract来实现接口,而无需override任何方法。

注意:在任何IDE中应用相同的概念,将引导您添加@Override批注。

答案 1 :(得分:1)

一般来说,我说“覆盖”是指重新定义继承的行为,而我将“实现”指的是定义行为(尚未实现)。

所以我想说B实现了show()

JLS似乎是这样的:

  

如果非抽象方法mC覆盖了一个抽象方法mA   类C,然后说mCmA实现C

oracle example documentation似乎说override也是为了重新定义行为:

  

子类覆盖方法的能力允许类   从行为“足够接近” 的超类继承,然后   根据需要修改行为。覆盖方法具有相同的名称,   参数的数量和类型,并以返回类型作为方法   覆盖。覆盖方法也可以返回该类型的子类型   由重写的方法返回。此子类型称为协变   返回类型。

请注意,java.lang.Override注释并没有说明相反(重点是我的):

  

指示方法声明旨在覆盖方法   超类型中的声明。如果方法带有此注释   注释类型编译器需要生成错误消息   除非至少满足以下条件之一:

     

该方法会覆盖实现在   超类型。

     

该方法的签名与任何方法的签名都等效   在对象中声明的公共方法。

该API可以在@Implement注释之外另外提供@Override
但是两者都显得很笨拙。因此,他们可能只保留一个@Override来传达这两件事。

答案 2 :(得分:0)

show()中的方法B实现了在接口A中声明的方法。

答案 3 :(得分:0)

您应该说实现,因为override意味着您正在覆盖某些现有方法,这对于接口来说是不正确的。接口不能包含方法定义,它们仅指定合同。