-1

こんにちは、SCJP 試験でこの質問に直面しました。インターフェイスと抽象クラスの両方が同じメソッドを持つ場合、Java ですべてのメソッドを私のクラスにオーバーライドするのにどちらが適していますか? どのシナリオを採用するのが良いか、さまざまなシナリオで説明してください。

これはインターフェースです:

interface ArithmeticMethods {
       public abstract void add();
       public abstract void sub();
       public abstract void div();
       public abstract void mul();
   }

これは抽象クラスです:

abstract ArithMethods {
       public abstract void add();
       public abstract void sub();
       public abstract void div();
       public abstract void mul();
   }

これは私のクラス名です: ArithMethodImplemenationclass.

今、私はどのようなシナリオでこのようにすべきですか

public ArithMethodImplemenation implements ArithmeticMethods{
   //override all methods of ArithmeticMethods
}

または、どのシナリオでこのようにすべきか

public ArithMethodImplemenation extends ArithMethods{
   //override all methods of ArithMethods
}

さまざまなシナリオで説明してください。そして、私の友人たちも、非常に多くのインタビューでこの質問に直面しました。しかし、彼らは成功できませんでした。

4

3 に答える 3

2

メソッドだけの空のabstractクラスを用意しても意味がありません。abstract

interface代わりにを使用してください。

Java では、拡張できるクラスは 1 つだけですが、複数のインターフェースを実装できることを思い出してください。

于 2013-10-10T14:53:45.237 に答える
1

抽象メソッドだけでフィールドを持たない抽象クラスの要点がわかりません。

抽象クラスは、クラスを実装する際に共通のコードを書き直す必要がないように、共通の機能の一部を実装するのに役立つはずです。

その場合、メソッド シグネチャのみを定義するため、インターフェイスの方が適しています。

于 2013-10-10T14:51:21.767 に答える
1

継承は主にスーパークラスからすべてのメソッドを継承することを意味していたため、実装する必要があります。実装は、空の継承されたすべてのメソッドをオーバーライドしないフレームワークを提供します。

Ken Arnold と James Gosling による Java Programming Language, Second Edition によると、次のようになります。

継承 - 主にコードの再利用を目的として、別のクラスの拡張として新しいクラスを作成します。つまり、派生クラスは、基本クラスのパブリック メソッドとパブリック データを継承します。Java では、クラスが 1 つの直接基底クラスを持つこと、つまり単一クラス継承のみが許可されます。

インターフェースの継承 - サブタイプ化の目的で、インターフェースの一部として定義されたメソッドを実装する新しいクラスを作成します。これは、インターフェースを実装するクラスであり、インターフェースに「準拠」する (またはそのタイプによって制約される)。Java は、複数のインターフェイスの継承をサポートしています。

于 2013-10-10T14:52:31.097 に答える