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