2017-05-19 10 views
-2

私はEdibleインターフェイス、Locationクラス、およびEdibleを実装するStrawberryクラスを持っています。私は問題なくコンパイルして実行できます。私は、インターフェイスを実装するクラスは、すべてのインターフェイスメソッドを含む必要があると考えました。 私の質問は、StrawberryがEdibleを実装しているのに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

このコードが実際にコンパイルエラーを生成する:

EDIT2:以下のような食用インタフェースで定義されたのgetLocation()メソッドを実装参照、実施例については、あろう。 **正確な**コードをここに貼り付けてもよろしいですか? – 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

することができますがStrawberry抽象クラスを作成するか、getLocation()を実装します。

どちらの方法でもコンパイルエラーが修正されます。

編集:IDEヘルプの必要はありません、指定されたコードは動作しない、実装が不足しています。抽象クラスを作成するか、メソッドを実装する。

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クラスは、インタフェースEdibleを実装しています – ratech

関連する問題