質問: インタフェースと抽象クラス(一般的なオブジェクト指向) 私は最近、インタフェイスクラスと抽象クラスの違いについて質問された2回の電話インタビューを受けました。私は私が考えることができるそれらのすべての側面を説明しました、しかし、彼らは私が特定の何かを述べるのを待っているようです、そしてそれが何であるかわかりません。私の経験から、私は次のことが正しいと思います。重要な点を見逃している場合はお知らせください。 インターフェース: インタフェースで宣言されたすべての単一のメソッドは、サブクラスで実装される必要があります。 イベント、デリゲート、プロパティ(c#)、およびメソッドのみがインタフェースに存在できます。クラスは複数のインタフェースを実装できます。 抽象クラス: サブクラスで実装する必要があるのは抽象メソッドだけです。抽象クラスは、実装を持つ通常のメソッドを持つことができます。抽象クラスは、イベント、デリゲート、プロパティ、メソッド以外にクラス変数を持つこともできます。 c#に多重継承が存在しないために、クラスが実装できる抽象クラスは1つだけです。 結局のところ、インタビュアーは質問「あなたが抽象メソッドだけを持つ抽象クラスを持っていたらどうしますか?それはインターフェースとどう違うのでしょうか」という質問を思いつきました。私は答えを知りませんでしたが、私はそれが上で述べたように継承だと思いますか? 別のインタビュアーから、インターフェース内にパブリック変数があるとしたら、抽象クラスとはどう違うのですか。私はあなたがインターフェイスの中にパブリック変数を持つことはできないと主張しました。私は彼が何を聞きたがっているのかわかりませんでしたが、彼も満足しませんでした。 関連項目 : 抽象クラスの代わりにインタフェースを使用する場合、およびその逆の場合 インタフェースと抽象クラス 抽象クラスとインタフェースのどちらを使用するかどうか インタフェースと抽象クラスの違いは何ですか?
回答: インターフェースを実装することで、継承( "is-a"関係)ではなく合成( "has-a"関係)を達成しています。継承ではなく動作の構成を実現するためにインターフェイスを使用する必要があるデザインパターンのようなことに関しては、覚えておくべき重要な原則です。