簡體   English   中英

抽象類和接口中具有不同返回類型的相同方法

[英]Same method with different return types in abstract class and interface

只是擴大問題..

抽象類和接口中的相同方法

假設一個類實現一個接口並擴展了一個抽象類,並且兩者都具有相同的方法(名稱+簽名),但是返回類型不同。 現在,當我重寫該方法時,僅當我使返回類型與接口聲明的返回類型相同時,它才編譯。

另外,如果在抽象類或接口中將該方法聲明為private或final會發生什么?

**在旁注。 愛因斯坦先生在一次采訪中堅持了很長時間。 在這種情況下,我們是否會這樣做?還是他只是在炫耀?

如果抽象類中的方法也是抽象的,則必須在其擴展的第一個具體類中提供其實現。 此外,您將必須提供接口的實現。 如果兩種方法僅在返回類型上不同,則具體類將具有僅在返回類型上不同的重載方法。 而且我們不能有僅在返回類型上有所不同的重載方法,因此會出現錯誤。

interface io {
    public void show();
}

abstract class Demo {
    abstract int show();         
}

class Test extends Demo implements io {  
    void show () {     //Overloaded method based on return type, Error
    }

    int show() {       //Error
        return 1;
    }

    public static void main (String args[]) {

    }
}

不可以,相同的方法名稱和參數,但是在Java中不可能使用不同的返回類型。 底層Java類型系統無法*在運行時確定方法調用之間的差異。

(*我確信有人會證明我做錯了,但是無論如何,解決方案還是被認為是不好的風格。)

關於private / final:由於必須實現這些方法,所以接口方法和abstract方法都不能是final。 默認情況下,接口方法是公共的。 抽象方法不能為私有方法,因為它必須在實現類中可見,否則您將永遠無法實現方法實現,因為實現類無法“看到”該方法。

使用Interfaces時,這些方法默認情況下是抽象的且是公共的,因此它們不能具有任何其他訪問說明符,並且不能是最終的

使用抽象類,抽象方法可以具有除私有之外的任何訪問說明符,並且由於它們是抽象的,因此它們不能是最終的

覆蓋時,方法簽名必須相同; 和covariant(已聲明返回類型的子類)返回類型是允許的

一個類不能實現兩個具有名稱相同但返回類型不同的方法的接口。 它將給出編譯時錯誤。 默認情況下,接口內部的方法是公共抽象,它們沒有任何其他說明符。

interface A
{
  public void a();
}
interface B
{
  public int a();
}

class C implements A,B
{

  public void a() // error
 {
    //implementation
 }

 public int a() // error
 {
    //implementation
 }

 public static void main(String args[])
 {

 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM