[英]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.