JavaやC#などの言語でPure Abstractベースクラスを使用する理由がないと主張していた同僚と議論していました。多重継承の欠如を回避することはできません。Pure Abstractクラスとインターフェイスの違い
私は常に物事が名詞であればそれはオブジェクトであり、動詞であればそれはインターフェースであると常に考えていたので、彼はこれについて間違っていると感じます。
例えば、Bird
という型を定義したければ、実装しないでfly
というメソッドを適用したい場合は、純粋な抽象クラスにします。
タイプFlies
を定義したければ、メソッドfly
とのインタフェースにします。
Bird
はFlies
を実装しています。
私は間違っていますか?
編集:私は私の視点をサポートするために与えることができます
だけ固体の引数は将来のある時点で、デザインは鳥が食べることができるように変更する必要があるかもしれないということです。すべての鳥が同じものを食べたら、Bird
に追加する必要があります。
Bird
がインタフェースであった場合、他の基本クラスから継承するものも私のBird
インタフェースを実装しているかどうかわからないため、この変更は単に悪夢となります。
+1 - 良い質問と私は、抽象クラスの使用のために来る答えには多くの合理的な理由が検討されると思います。 –
あなたの質問の*部分*を拾うだけです(したがって、*回答*を投稿しません):私はそのインターフェースが常に*動詞*であるとは言いません。インターフェースは、*クラス*を使用して、クラスが名詞として最もよくモデリングされた顔を世界に示すことを可能にします。 'java.util'のインタフェースのいくつかを見てみましょう:' Comparator'、 'Enumeration'、' List'、 'Iterator'、' Map'、... –
意見は背中のようなものです。他より。私はOOPと文法を比較するのは間違いだと思いますが、それは近いです。 – Lloyd