9

パフォーマンスやメモリなどに関して、Javaでのextendsimplementsの違いは何ですか。たとえば、次のシナリオを考えてみましょう。

1)

public interface PrintResult
{
  public final int NO_ERROR=0;
  public final int SUCCESS=1;
  public final int FAILED=-1;
}


public class PrintProcess implements PrintResult
{
  //Perform some operation
}



2)

public class PrintResult
{
  public final int NO_ERROR=0;
  public final int SUCCESS=1;
  public final int FAILED=-1;
}


public class PrintProcess extends PrintResult
{
  //Perform some operation
}

上記のシナリオ(1,2)の場合、 extends(子クラスの派生)とimplements(インターフェースの実装)の使用の違いは何ですか。パフォーマンス、メモリなどに関して。?

4

2 に答える 2

8

思い出に残るQ&Aセッション中に、誰かがJames Gosling(Javaの発明者)に尋ねました。Javaをもう一度やり直すことができたら、何を変えますか?私はクラスを省きます、彼は答えました

Javaでは、複数のクラスを拡張することはできません。これにより、多重継承に関連するいくつかの問題が回避されます。ただし、複数のインターフェースを実装することを選択できます。これは大きなプラスです。

またextends、コードの柔軟性が低下すると考える人もいます。

ただし、パフォーマンスや効率などに大きな違いがあるとは思えません。実際、同じバイトコードを生成する可能性もあります(よくわかりませんが)。そして、あなたは異なる機能を持つ2つの異なるものを比較しています。たとえば、リンゴがオレンジよりも効率的かどうかを尋ねるようなものです。

于 2012-03-03T12:52:08.273 に答える
1

クラスは別のクラスを拡張し、インターフェイスを実装します。インターフェイスは別のインターフェイスを拡張します。インターフェイスには実装されたメソッドがありません。定義されたすべてのメソッドは空であるため、クラスがインターフェイスから継承する場合は、そのメソッドを実装する必要があります。ただし、Class1がClass2を継承している場合は、すでにいくつかの作業メソッド(Class2から)があり、Class2を拡張するだけです。

于 2015-12-05T12:02:00.577 に答える