2017-12-21 4 views
1

は、私はインターフェイスを持っていると言う:実装を拡張するクラスは、それがそのインタフェースを実装することをマークする必要がありますか?

interface IFoo { 
    void foo(); 
} 

と、それを実装するクラス:

class Foo implements IFoo { 
    void foo() { 
     System.out.println("foo!"); 
    } 
} 

と、そのクラスを拡張するクラス:

class Bar extends Foo { 
    void foo() { 
     super.foo() 
     System.out.println("bar!"); 
    } 
} 

Barclass Bar extends Fooとして宣言する必要がありますまたはclass Bar extends Foo implements IFoo

+1

私は 'class Bar extends Foo'と思っても十分だと思います。 – vm345

+1

関連:https://stackoverflow.com/questions/18558536 –

+0

あなたはそれを実装するクラスを持っていません。あなたは最高でも*模倣するクラスを持っています。実際にオーバーライドされたメソッドを表すために '@Outride'を使用するのが最善です。コンパイラは' IFoo'を実装していないためにあなたを驚かせます。 – Makoto

答えて

0

すでに実装済みであるため、別の時間に実装する必要はありません。

0

1)あなたは今の定義がimplementsキーワード欠落していたので、自分のFooクラス定義で少し修正を行う必要があるので、あなたは、Fooは、そのインタフェースを実装して、コンパイラに指示する必要があります:

class Foo implements IFoo { 
    void foo() { 
     System.out.println("foo!"); 
    } 
} 

2)あなたは、拡張クラスがこのインタフェースを実装しているということをもう一度言い換える必要はありません。

関連する問題