B类中的show()方法是“重写”,“实现”还是只是“定义”?
interface A
{
void show();
}
class B implements A
{
public void show()
{
System.out.println("What is the proper term to explain?");
}
}
答案 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
,然后说mC
从mA
实现C
。
oracle example documentation似乎说override
也是为了重新定义行为:
子类覆盖方法的能力允许类 从行为“足够接近” 的超类继承,然后 根据需要修改行为。覆盖方法具有相同的名称, 参数的数量和类型,并以返回类型作为方法 覆盖。覆盖方法也可以返回该类型的子类型 由重写的方法返回。此子类型称为协变 返回类型。
请注意,java.lang.Override
注释并没有说明相反(重点是我的):
指示方法声明旨在覆盖方法 超类型中的声明。如果方法带有此注释 注释类型编译器需要生成错误消息 除非至少满足以下条件之一:
该方法会覆盖或实现在 超类型。
该方法的签名与任何方法的签名都等效 在对象中声明的公共方法。
该API可以在@Implement
注释之外另外提供@Override
。
但是两者都显得很笨拙。因此,他们可能只保留一个@Override
来传达这两件事。
答案 2 :(得分:0)
类show()
中的方法B
实现了在接口A
中声明的方法。
答案 3 :(得分:0)
您应该说实现,因为override
意味着您正在覆盖某些现有方法,这对于接口来说是不正确的。接口不能包含方法定义,它们仅指定合同。