2011-07-26 15 views
2

可能性の重複:
Java: interface/abstract classes/abstract method抽象クラス

4つのmethods.Allこれらのメソッドは抽象的であると私は抽象クラスを持っています。 抽象クラスはインタフェースと同等ですか?

public abstract class ABC{ 
    abstract void f1(); 
    abstract void f2(); 
    abstract void f3(); 
    abstract void f4(); 
} 

誰でも説明できますか?

+1

これは、何度も議論されてきました。ちょうど[多くの1つのリンク...](http://stackoverflow.com/questions/2124951/java-interface-abstract-classes-abstract-method) – Jacob

答えて

1

いいえ、クラスは複数のインターフェイスを実装できますが、抽象クラスを含む1つのスーパークラスのみを「拡張」することができます。

1

AFAIK、JavaはC++のように多重継承をサポートしていません。ただし、複数の実装をサポートしています(クラスは複数のインタフェースを実装できます)。

したがって、ABCから継承すると、他のクラスから継承することはできません。しかし、あなたがそれをインタフェースに変えれば、それを行うことができます。

1

大雑把に言えば、 クラスは一度にインターフェイス以上のimplementsのインターフェイスを持つことができますが、extendは抽象クラスにすることができます。

1

抽象クラスはメソッドの具体的な実装を含むかもしれないが、インタフェースはそうではないかもしれないという点で、クラスはインタフェースとは異なります。

public class Abstractclass{ 
abstract void f1(); 
/** 
    * this is a concrete method with implementation 
    */ 
void f2(){ 
    System.out.println("do something"); 
} 
} 

しかし、インタフェースのための

、すべてのメソッドは暗黙的に抽象的:抽象クラスは、このような具体的な方法を持っているため例えば

は、それが合法です。あなたは具体的な方法を持つことはできません。

public interface InterfaceClass{ 
    void f2(); 
    void f3(); 
} 

interfaceはありません実装の開発者との契約のようなものです。基本的にはwhatが指定されています。開発者はこのインターフェイスを実装してhowを定義します。

abstractクラスには、サブクラスに役立つ実装がいくつか含まれています。

0

抽象クラスとインターフェイスの間にはかなりの違いがあります。私はいくつかの名前を付けることができます(私はJavaのプログラマではありませんが、C#のプログラマですが、これらの違いはまだ当てはまります)。

インターフェイスは継承されませんが、抽象クラスは継承されます。プログラミング言語が複数の継承をサポートしていない場合は、これが重要になります。

インターフェイスにはコードを含めることはできません。シグネチャのみが含まれますが、抽象クラスにはコードを含めることができます。

アクセスレベル:private、protected、publicは、インタフェースでは抽象クラスで宣言できます。