インターフェイスと抽象クラス(一般的なOO)
最近、電話インタビューを2回行ったところ、インターフェースと抽象クラスの違いについて尋ねられました。私は考えられるすべての側面について説明しましたが、彼らは私が特定のことを述べるのを待っているようで、それが何であるかわかりません。 私の経験から、次のことが正しいと思います。重要な点が足りない場合はお知らせください。 インターフェース: インターフェースで宣言されたすべてのメソッドは、サブクラスで実装する必要があります。インターフェイスに存在できるのは、イベント、デリゲート、プロパティ(C#)、およびメソッドのみです。クラスは複数のインターフェースを実装できます。 抽象クラス: サブクラスでは、抽象メソッドのみを実装する必要があります。Abstractクラスは、実装を伴う通常のメソッドを持つことができます。抽象クラスは、イベント、デリゲート、プロパティ、メソッドの横にクラス変数を持つこともできます。C#にはマルチ継承が存在しないため、クラスは1つの抽象クラスしか実装できません。 結局のところ、インタビュアーは「抽象メソッドのみを持つ抽象クラスがあるとしたらどうでしょうか?それはインターフェースとどう違うのですか?」私は答えを知りませんでしたが、それは上記のように継承だと思いますか? 別のインタビュアーから、インターフェイス内にパブリック変数がある場合、抽象クラスとどう違うのかと尋ねられました。インターフェイス内にパブリック変数を含めることはできないと私は主張しました。私は彼が何を聞きたいのか知りませんでしたが、彼も満足していませんでした。 以下も参照してください。 抽象クラスの代わりにインターフェースを使用する場合、およびその逆の場合 インターフェースと抽象クラス 抽象クラスとインターフェースのどちらを使用するかをどのように決定しますか? インターフェイスと抽象クラスの違いは何ですか?