簡體   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