2017-05-19 88 views
-2

我有一個Edible接口,一個Location類和一個實現Edible的Strawberry類。我可以編譯並運行,沒有任何問題。然而,我認爲一個實現接口的類需要包含所有的接口方法。 我的問題是,爲什麼我沒有得到與此代碼錯誤,因爲草莓實施食用,但不包括getLocation方法?如果我將getLocation的返回類型更改爲一個基元,我得到我正在尋找的錯誤。返回自定義類型是否有所作爲?如果是這樣,爲什麼?Java界面 - 自定義返回類型?

public interface Edible { 

    Location getLocation(); 

} 

public class Location { 
    private String name; 

    public Location(String n){ 
    name = n; 
    } 
} 

public class Strawberry implements Edible{ 
    int cals; 
    Location location; 

    public Strawberry(int c, Location l){ 
    cals = c; 
    location = l; 
    } 
} 
+9

此代碼的確生成編譯錯誤。你確定你在這裏粘貼了**確切的**代碼嗎? – Mureinik

回答

0

我貼的代碼與jdk1.8.0_111配置日食4.6.3並獲得以下錯誤: The type Strawberry must implement the inherited abstract method Edible.getLocation() Strawberry.java /test/src line 1 Java Problem

你可以使類草莓抽象,或實現getLocation()。

這兩種方法都可以修復編譯錯誤。

編輯:無需IDE幫助,給定的代碼無法工作,缺少實現。製作抽象類或實現方法。

EDIT2:作爲參考,一個工作示例中,實現在該接口中定義食用的的getLocation()方法,將像如下:

public class Strawberry implements Edible { 
    int cals; 
    Location location; 

    public Strawberry(int c, Location l) { 
     cals = c; 
     location = l; 
    } 

    @Override 
    public Location getLocation() { 
     return location; 
    } 
} 
+0

謝謝!我看到現在發生了什麼! Strawberry類擴展了LivingThing類,並且該類有getLocation方法!感謝您指出正確的方向。 – Paul

+0

我不確定您是否正確。 首先,您的示例代碼中沒有LivingThing類。 第二,你的代碼如下所示:Strawberry類實現接口食用 – ratech