2011-05-16 174 views
3

我正在學習java。我試圖運行代碼,我得到了這個錯誤。它說,返回類型是不兼容的。代碼 部分,其中原因是什麼,它給我的錯誤Java - 錯誤:返回類型不兼容

class A { 
      public void eat() { } 
    } 

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

回答

8

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

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

但是,子類可以聲明與超級類中籤名相同的方法。 我們稱之爲「重寫」。

你需要有這個,

class A { 
    public void eat() { } 
} 

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

OR

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() { } 
} 
2

如果B然後延伸A即可重寫方法(如eat),但不能更改其簽名。所以,你的B類必須是

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

B extends A應該被解釋爲B是A.

如果A的方法不返回任何東西,B也應該這樣做。

2

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

現在爲了覆蓋允許子類中方法的返回類型必須符合超類中方法的返回類型。這隻有在子類中的方法的返回類型是covariant與超類中方法的返回類型時纔有可能。

由於boolean </: void(讀取:boolean不是void的子類型),編譯器會引發「返回類型不兼容」錯誤。

0

這既不是重載也不是重寫。我們不能重載返回類型,我們不能用不同的返回類型重寫(除非它們是Java 1.5的協變返回值)。