\r\n\r\n
抽象クラスとインターフェース
抽象クラスとインターフェースは、多くのオブジェクト指向プログラミング言語(Javaなど)に見られるオブジェクト指向の構成要素である。抽象クラスは通常の(具象)クラスを抽象化したものと考えることができ、インターフェースはコントラクトを実装する方法と考えることができる。抽象クラスとは、初期化できないが拡張できるクラスのことである。インターフェースは、他のクラスが必ず実装しなければならない型です。Javaでは、抽象クラスはAbstractキーワードで宣言し、インターフェースはinterfaceキーワードで定義します。
抽象クラスとは何ですか?
通常、抽象クラスは抽象基底クラス(ABC)とも呼ばれ、インスタンス化できない(クラスのインスタンスを生成できない)。したがって、抽象クラスは、プログラミング言語が継承(クラスを拡張してサブクラスを作成する機能)をサポートしている場合にのみ意味を持つ。抽象クラスは通常、抽象的な概念や実体を表し、部分的な実装を持つか、あるいは実装を持たない。したがって、抽象クラスはサブクラスが派生する親クラスとして機能し、そのクラスは親クラスの不完全な機能を共有し、機能を追加して完成させることができる。
抽象クラスは、抽象メソッドを含むことができます。拡張抽象クラスのサブクラスは、これらの(継承された)抽象メソッドを実装することができます。このような抽象的なメソッドをすべて実装しているサブクラスは、具象クラスとなります。しかし、そうでない場合は、サブクラスも抽象クラスになってしまう。これらのことは、プログラマがクラスを抽象クラスと指定するとき、そのクラスは不完全であり、サブクラスから継承しなければ完成しない要素を持つことを意味しているのである。これは、2人のプログラマー間で契約を結ぶのに最適な方法で、ソフトウェア開発における作業を簡略化することができます。継承するコードを書くプログラマは、メソッドの定義に厳密に従う必要があります(もちろん、独自の実装を持つことも可能です)。
インターフェースは?
インターフェースは、それを実装するクラスによって実装される合意を指定するために使用される抽象型です。インターフェースを定義するにはinterfaceキーワードを使用し、クラスを通してインターフェースを実装するにはImplementsキーワードを使用します(プログラミング言語Javaの場合)。通常、インターフェースには、メソッドのシグネチャと定数の宣言だけが含まれます。特定のインタフェースを実装するインタフェースは、そのインタフェースで定義されたすべてのメソッドを実装するか、抽象クラスとして宣言する必要があります。Javaでは、オブジェクト参照の型はインターフェース型として定義することができる。ただし、オブジェクトはNULLであるか、その特定のインターフェースを実装しているクラスのオブジェクトを含む必要があります。JavaではImplementsキーワードを使用することで、1つのクラスの複数のインターフェースを実装することができます。
抽象クラスとインターフェースの違いは何ですか?