繁体   English   中英

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

[英]When we define the abstract methods of an interface in a class do we 'override' or 'implement' or simply say 'define' those methods?

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

interface A
{
    void show();
}

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

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

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

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

多态性声明和覆盖是相辅相成的。

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

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

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

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

捷豹路虎似乎就是这样:

如果非抽象方法mC覆盖了类C的抽象方法mA ,则称mC实现了C mA

oracle示例文档似乎说override也是为了重新定义行为:

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

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

指示方法声明旨在覆盖超类型中的方法声明。 如果使用此注释类型对方法进行注释,则除非至少满足以下条件之一,否则要求编译器生成错误消息:

该方法的确覆盖实现了在超类型中声明的方法。

该方法的签名与Object中声明的所有公共方法的签名等效。

该API可以提供了@Implement额外的@Override注解。
但是两者都显得很笨拙。 因此,他们可能只保留一个: @Override来传达两件事。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM