2016-04-13 7 views
1

私はC++を学ぶ過程にあり、オブジェクト指向プログラミングを実践しようとしています。私が使用している参考文献の多くは、Javaチュートリアルの形式で提供されています。'interface'はJavaの「抽象」の限定版ですか?

私が気づいたことの1つは、Javaに「抽象クラス」と「インターフェース」という考えがあることです。私は、なぜこれらの2つが正確に存在するのかについて混乱しています。インターフェイスを使ってできることは、抽象クラスと同じように実行できたようです。

私の質問:インターフェイスはJavaの追加機能を提供しますか?それとも、抽象クラスが継承するクラスで独自のメソッド/データメンバーを実装できるようにするべきではないという指定方法ですか?

+5

クラスに**複数の**インターフェイスを実装できます。したがって、インタフェースは** type **の多重継承を提供します。 –

+0

上記のように、複数のインターフェイスを実装することができます。メソッドシグネチャ、定数フィールド、デフォルトメソッドなどを保持するために使用されます。デフォルトメソッドの優れた点は、 'default'キーワードで指定されたメソッドの中に必要に応じて実装を追加できることです。 – Logan

答えて

1

Javaでは多重継承ができません。つまり、1つの子クラスに複数の親クラスを持つことはできません。しかし、クラスは複数のインタフェースを「実装」することができます。これにより、複数の継承を実現できます。

Javaバージョン1.8より前では、抽象クラスとインタフェースの主な違いは、インタフェースでメソッドを定義することはできませんが、抽象クラスで行うことができます。しかしJava 8では、インターフェース自体に「デフォルト」メソッドと「静的」メソッドの実装が可能です。

あなたの質問によると、抽象クラスを継承すると、Javaは子クラスの親クラスの抽象メソッドを実装することを強制しますまたは抽象的なものとして子クラスを宣言します。したがって、子クラスが抽象クラスを継承する場合、子クラスは自由に宣言して独自のメソッドとデータメンバーを定義します。また、親抽象クラスのメソッドをオーバーライドすることもできます。

インターフェイスと抽象クラスの使用方法は、必要に応じて異なります。しかし、一般的にはインターフェースを使う方が良いです。

0

はい、インターフェイスは特別な種類のABCです。しかし、なぜJavaはお互いを区別しているのですか? 私の理解では、私はそのオブジェクトが複数のインタフェースを継承することができますが、持つことができないという理由だと信じ

  • ABCは
  • インタフェースはインスタンスが

を持っている一般的な機能に焦点を当てていたクラスの一般的な用語に焦点を当てていることです複数のスーパークラス。

0

大丈夫です。 OOP抽象化では、重要な事実のみを考慮してプログラミング環境で実世界のものをモデル化する主な概念です。たとえば、Personクラスを作成する場合、実際に必要とされるのは、その人の名前、誕生日、住所などです。それが抽象化の基本的な考え方です。

なぜ抽象化を達成するには、Java、抽象クラス、およびインタフェースが2つあります。この例では、バードクラスのような例を考えてみましょう。あなたが鳥を見せてくれると言われたら、実際に何を見せるかは、特定のタイプのオウムやその他の鳥です。私たちは一般的に鳥類と呼んでいますが、異なる種類の鳥類の収集以外には、鳥類と呼ばれる正確なものはありません。その場合は抽象的なエンティティです。つまり、鳥は現実世界に表示するには抽象的すぎます。したがって、鳥は抽象クラスです。

それはインターフェースになると、を食べ方法がありIEATと呼ばれるインターフェースがありますと仮定します。このインターフェースを実装するクラスDog、Cat、Parrotがあれば、それらはすべて一般的に食べます。しかし、彼らが食べる方法は、クラスに特有です。したがって、インターフェイスはクラス間で共通の動作が必要な場合に使用されますが、実装は実装されているクラスによって異なります。

また、クラスによって複数のインターフェイスを実装でき、クラスによって1つの抽象クラスだけを拡張できるなど、いくつかの相違点があります。しかし、主なアイデアはそれです。基本的に抽象クラスとインタフェースの2つの方法があります。これは設計上の理由からです。

0

文字通り、抽象クラスは一種のクラスであり、継承することができます。抽象クラスには特定のメソッドを含めることができます。しかし、複数の継承はJavaでは許されません。つまり、クラスは2つのクラスまたはクラスを継承できません。 しかし、interfaceはクラスではなくクラスの外観であり、クラスがどのように動作するかを記述するだけで、インタフェースをインスタンス化することはできません。しかし、クラスはいくつかのインターフェースを実装することができます。短い

  • 抽象クラスで

    は、クラス全体(属性及び行動)の抽象であり、インタフェースは "部分クラス(のみ行動)抽象クラスとそのサブクラス間

  • 関係の抽象しますis-a "であり、それらは似たようなクラスです。インタフェースとその実装クラスとの関係は特定の関係ではありません。

  • 抽象的なデザインパターンは下から上に向かっているため、抽象クラスを設計する前にサブクラスを知る必要があります。しかし、インタフェースを設計する前にクラスのことを知る必要はありません。

0

インターフェイスの実装あなたのクラスに能力を追加すること。 抽象クラスは実装されていません。不完全クラスです。

//whoever extends this has to be some kind of Toy 
    abstract class Toy 
    { 
     public void play(){ 
      //do some play 
     } 
    } 

    //whoever implements this will be able to Fly 
    interface Flyable 
    { 
     public void fly(); 
    } 

    BirdToy extends Toy implements Flyable 
    { 

    } 

    Vehicle1Toy extends Toy 
    { 
     //like Truck 
    } 

    Vehicle2Toy extends Toy implements Flyable 
    { 
     //like helicopter 
    } 

    class Person implements Flyable 
    { 
     //like superman 
    }