タグ付けされた質問 「abstract-class」

抽象クラスは、インスタンス化できないクラスです。これらは、いくつかの具象クラスに共通の機能とインターフェース仕様を提供するために存在します。


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




15
使用するタイミング:Java 8+インターフェースのデフォルトメソッドと抽象メソッド
Java 8では、Default Methodsと呼ばれるインターフェースでメソッドのデフォルト実装が可能です。 私は(with )interface default methodではなく、そのようなをいつ使用するのか混乱しています。abstract classabstract method(s) では、デフォルトのメソッドとのインターフェースをいつ使用し、抽象クラス(抽象メソッドを含む)をいつ使用する必要があるのでしょうか。抽象クラスはそのシナリオでもまだ役に立ちますか?

21
Objective-Cで抽象クラスを作成する
私はもともとJavaプログラマーで、現在Objective-Cを使用しています。抽象クラスを作成したいのですが、Objective-Cではそれができないようです。これは可能ですか? そうでない場合、Objective-Cで抽象クラスにどのくらい近づくことができますか?

29
インターフェイスと抽象クラスの違いをどのように説明すればよいですか?
インタビューの1つで、インターフェイスと抽象クラスの違いを説明するように求められました。 これが私の返答です: Javaインターフェースのメソッドは暗黙的に抽象的であり、実装を持つことはできません。Java抽象クラスには、デフォルトの動作を実装するインスタンスメソッドを含めることができます。 Javaインターフェースで宣言された変数は、デフォルトではfinalです。抽象クラスには、非final変数が含まれる場合があります。 Javaインターフェースのメンバーはデフォルトでパブリックです。Java抽象クラスは、private、protectedなどの通常のクラスメンバーのフレーバーを持つことができます。 Javaインターフェースは、キーワード「implements」を使用して実装する必要があります。Java抽象クラスは、キーワード「extends」を使用して拡張する必要があります。 インターフェースは別のJavaインターフェースのみを拡張でき、抽象クラスは別のJavaクラスを拡張して複数のJavaインターフェースを実装できます。 Javaクラスは複数のインターフェースを実装できますが、拡張できる抽象クラスは1つだけです。 しかしインタビュアーは満足せず、この記述は「本好きの知識」を表すものだと私に言った。 実用的な例を使用して、インターフェイスより抽象クラスをいつ選択するかを説明し、より実用的な対応を求められました。 どこで私は間違えましたか?

14
抽象クラスを単体テストする方法:スタブで拡張しますか?
抽象クラス、および抽象クラスを拡張するクラスを単体テストする方法を考えていました。 抽象クラスを拡張してテストし、抽象メソッドをスタブ化してから、すべての具象メソッドをテストする必要がありますか?次に、オーバーライドするメソッドのみをテストし、抽象クラスを拡張するオブジェクトのユニットテストで抽象メソッドをテストしますか? 抽象クラスのメソッドをテストするために使用できる抽象テストケースがあり、抽象クラスを拡張するオブジェクトのテストケースでこのクラスを拡張する必要がありますか? 私の抽象クラスにはいくつかの具体的なメソッドがあることに注意してください。



12
Pythonで抽象クラスを作成することは可能ですか?
Pythonでクラスまたはメソッドを抽象化するにはどうすればよいですか? 私は__new__()そのように再定義しようとしました: class F: def __new__(cls): raise Exception("Unable to create an instance of abstract class %s" %cls) しかしG、次のFように継承するクラスを作成すると、 class G(F): pass Gその場合、スーパークラスの__new__メソッドを呼び出すため、インスタンス化もできません。 抽象クラスを定義するより良い方法はありますか?



5
Pythonで抽象基本クラスを使用する理由
私はPythonでの従来のダックタイピングの方法に慣れているため、ABC(抽象基本クラス)の必要性を理解できません。ヘルプには、それらを使用する方法について良いです。 PEPで理論的根拠を読み込もうとしたが、それは私の頭を超えた。変更可能なシーケンスコンテナーを探していた場合は、を確認する__setitem__か、おそらくそれを使用しようとします(EAFP)。ABCを使用する数値モジュールの実際の使用例はありませんでしたが、これは理解する必要がある最も近いものです。 誰かがその理由を説明してくれませんか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.