簡體   English   中英

Java - 錯誤:返回類型不兼容

[英]Java - Error : return type is incompatible

我正在學習java。 我試圖運行代碼,我得到這個錯誤: return type is incompatible 代碼中顯示錯誤的部分代碼。

class A {
    public void eat() { }
}

class B extends A {
    public boolean eat() { }
}

為什么會這樣?

這是因為我們不能在具有相同名稱但返回類型不同的類中使用兩個方法。

子類不能使用不同的返回類型聲明具有與超類中已存在方法相同名稱的方法。

但是,子類可以聲明一個方法,其簽名與超類中的簽名相同。 我們稱之為“Overriding”。

你需要這個,

class A {
    public void eat() { }
}

class B extends A {
    public void eat() { }
}

要么

class A {
    public boolean eat() { 
        // return something...
    }
}

class B extends A {
    public boolean eat() { 
        // return something...
    }
}

一個好的做法是通過注釋@Override標記覆蓋的方法:

class A {
    public void eat() { }
}

class B extends A {
    @Override
    public void eat() { }
}

如果B擴展A然后你可以覆蓋方法(比如eat ),但是你不能改變它們的簽名。 所以,你的B班必須是

 class B extends A {
        public void eat() { }
 }

B extends A應解釋為B是A.

如果A的方法沒有返回任何東西,B應該做同樣的事情。

當子類中的方法具有與超類中的方法相同的名稱和參數(它們的類型,編號和順序)時,子類中的方法將覆蓋超類中的方法。

現在,為了允許覆蓋,子類中方法的返回類型必須符合超類中方法的返回類型。 僅當子類中方法的返回類型與超類中的方法的返回類型協變時 ,才可能這樣做。

因為, boolean </: void (讀取: boolean不是void子類型),編譯器會引發“返回類型不兼容”錯誤。

這既不是超載也不是重載。 我們不能在返回類型上重載,並且我們不能用不同的不同返回類型覆蓋(除非它們是協變的返回我們Java 1.5)。

暫無
暫無

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

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