abstract classとinterface

2742 ワード

1.メソッドの存在を宣言して実装しないクラスを抽象クラスと呼び、いくつかの基本的な動作を表すクラスを作成し、メソッドを宣言しますが、クラスで実装できない場合.abstractクラスのインスタンスを作成できません.ただし、抽象クラスであり、特定のサブクラスのインスタンスを指す変数を作成できます.関数や抽象静的メソッドを抽象的に構築することはできません.
(2)abstractクラスのサブクラスは、親クラスのすべての抽象メソッドに実装を提供し、そうでなければ抽象クラスでもある.代わりに,この方法はサブクラスで実現される.その動作を知っている他のクラスは、クラス内でこれらの方法を実装することができる.
(3)インタフェース(interface)は抽象クラスの変体である.インタフェースでは、すべての方法が抽象的です.マルチ継承性は、このようなインタフェースを実装することによって得ることができる.インタフェースのすべての方法は抽象的で,プログラム体は1つもない.インタフェースはstatic finalメンバー変数のみを定義できます.インタフェースの実装は、インタフェース定義から動作を継承できない以外は、サブクラスと同様です.クラスが特殊なインタフェースを実装する場合、このインタフェースのすべての方法を定義します(プログラムボディに与えられます).次に、インタフェースを実装したクラスの任意のオブジェクトでインタフェースのメソッドを呼び出すことができます.抽象クラスがあるため、インタフェース名を参照変数のタイプとして使用できます.通常のダイナミックアセンブリが有効になります.リファレンスはインタフェースタイプに変換するか、インタフェースタイプから変換することができます.instanceof演算子は、オブジェクトのクラスがインタフェースを実装しているかどうかを決定するために使用できます.
(4)abstract classにはメンバー変数があり、非抽象的な方法があり得るが、interfaceのメンバー変数はstatic,finalでなければならず、非抽象的な方法はない.
(5)1つのゲートのインスタンスを実装するには、この抽象概念を定義する2つの方法があります.
   abstract class Door{
   abstract void open();
   abstract void close();
    }
   interface Door{
    void open();
    void close();
    }

完成する.しかし、ボスは満足していないのを見て、また需要を追加して、私が警察に通報できるドアを言って、このように実現することができます
 
 abstract class Door{
   abstract void open();
   abstract void close();
   abstract void alarm();
}
  interface Door{
  void open();
  void close();
}

ちょっと違うようですが、アラームはドア特有の属性なのか、答えはもちろん否定的で、ISP(Interface Segregation Principle)インタフェース隔離の原則に違反しています.アラーム機能を別の抽象クラスまたはインタフェースとして抽象化することができますが、Javaはマルチ継承メカニズムをサポートしていないため、インタフェースで定義するしかありません.
   abstract class Door{
   abstract void open();
   abstract void close();
    }
  
   interface Door{
    void open();
    void close();

}
   interface Alarm{
   void alarm();

}

これにより、アラーム機能を備えたドアには、次の2つの方法が実現されます.
Class AlarmDoor extends Door implements Alarm{
  void open(){..};  
  void close(){..};  
  void alarm(){..};  
}

class AlarmDoor implements Door,Alarm{
 void open(){..};  
  void close(){..};  
  void alarm(){..};  
}

Javaでは「is a」を表す関係を継承し,インタフェースでは「like a」を表す関係を表し,この2つの関係を明らかにすることは,抽象概念を定義する際に選択される.第1の方法は、これはドアであり、アラーム機能があることを示している.2つ目の方法は、このオブジェクトにはドアの特徴もあれば、アラーム機能もあることを示しています.
参照
この実現方式は基本的に問題分野に対する理解を明確に反映し,我々の設計意図を正確に明らかにすることができる.
参照
abstract classとinterfaceはJava言語における抽象概念を定義する2つの方法であり、それらの間には大きな類似性がある.しかし、それらの選択には、問題分野における概念の本質に対する理解、設計意図に対する反映が正しいかどうか、合理的かどうかが反映されることが多い.概念間の異なる関係を表現しているからである(いずれも需要の機能を実現することができるが).