2017-05-19 84 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