1

インターフェイスを実装するクラスを作成しています - インターフェイスには 1 つのメソッドが定義されています。クラス定義を書きimplements interfaceService、クラス宣言の後に書き、定義を終了し、インターフェイスメソッドをオーバーライドせずにクラスの括弧を閉じると、問題なくコンパイルされます。コンパイル エラーは発生せず、実装クラスを Eclipse に保存できます。なんでそうなの?実装クラスがメソッドを強制的にオーバーライドするべきではありませんか? インターフェイスと実装クラスの定義は次のとおりです。

インターフェース:

public interface interfaceService{
    List<Map<String, Object>> doSearch(SearchVo formVo,String indexName,String type)
            throws SearchException;
    long getTotalHitCount();
}

クラス:

public abstract class ClientFlagSearch implements SearchService{

}

これは、実装クラスを抽象として定義することに関係しているように感じます。なんで?

4

5 に答える 5

6

実装クラスがメソッドを強制的にオーバーライドするべきではありませんか?

いいえ、abstractクラスはインターフェイスのすべてのメソッドを実装する必要はありません。実装しないことを選択したメソッドは残りabstract、継承ツリーのさらに下に実装する必要があります。

そうClientFlagSearchでない場合はabstract、実際に のすべてのメソッドを実装する必要がありSearchServiceます。

于 2013-08-28T13:55:49.230 に答える
1

ルールは抽象メソッドであり、最初の具体的なクラスで実装する必要があります

  • クラスはメソッドを実装するabstract必要はありませんabstract
  • 抽象クラスは抽象メソッドを持つことができます。
于 2013-08-28T13:56:11.840 に答える
0

インターフェイスは、抽象メソッドのコレクションです。

抽象クラスは抽象メソッドを持つことができます。

可能ですが、Abstract クラスにインターフェイスのメソッドを実装する必要はありません。

于 2013-08-28T13:55:55.737 に答える
0

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.htmlから:

ただし、クラスが抽象クラスとして宣言されている場合は、すべてのインターフェイス メソッドを実装していないクラスを定義することもできます。

于 2013-08-28T13:56:04.677 に答える