抽象クラスとインタフェースの区別と使用


抽象クラスの3つの特性(abstract)
  • 抽象クラスはインスタンス化を許さず継承されるしかありません.つまり、newが抽象クラスのオブジェクトを出すことはできません.
  • 抽象クラスには2つの属性と方法があります
  • 抽象属性と方法:宣言のみ、
  • は実装されません.
  • 非抽象属性と方法:宣言+実装
  • サブクラス実装抽象メソッド:サブクラスは親クラスのすべての抽象メソッドを実装する必要があります.

  • インタフェースの3つのプロパティ(interface)
  • インタフェースは、属性
  • を含むことができない.
  • インタフェースはメソッドのみを宣言し、実装コード
  • を含めることはできません.
  • クラスがインタフェースクラスを実装する場合、インタフェースに宣言されたすべてのメソッド
  • を実装する必要がある.
    抽象クラスとインタフェースの違い
  • 抽象クラスはメンバー変数と方法の抽象であり、is-a関係であり、コード多重化問題
  • を解決するためである.
        is-a:            
          :       ,        。(                       、           ,          )
  • インタフェースは、メソッドに対する抽象(抽象クラス-クラスの抽象)を解決するだけであり、has-a関係であり、デカップリング問題を解決し、コードの拡張性を高めるための
  • である.
        has-a:                
               ,             
          :            (Person)            (Person xiaoming = new Person("  "))           

    両者をさいべつする
  • 抽象類-それが何Bが抽象類Aを継承してAの中の抽象属性と方法を実現したのかを強調すると、それはA例えば鳥(翼があって、尖った口があって、卵を産むことができます)-継承-B(人の話を言うことができます):Bが鳥類という抽象類を継承すると、彼は鳥類の相関特性を実現しなければなりません.だから、それはオウム
  • です.
  • インタフェース-ManとWoman実装インタフェースPersonがPersonの関連方法を書き換える機能があることを強調するが、異なる内容を与え、さらに異なる能力を持つ
  • まとめ
  • 抽象クラスは、コード多重化の問題を解決するために、例えば、すべての鳥関連のクラスを書き、鳥ごとにある属性を抽象クラスに書き、それからサブクラスに異なる鳥特有の属性を書き込むために、サブクラスにこれらの属性を追加する必要はありません.コードを高度に多重化する
  • インタフェースは抽象的な問題を解決するためです.例えば、王者の栄光の中のすべての英雄の技能を書くためです.これらの英雄は3つの技能しかないと仮定すると、インタフェースで定義(技能1、技能2、技能3)すればいいです.そして、各英雄の技能はサブクラスで具体的に実現すればいいです.