このクラス階層を考えてみましょう:
Book extends Goods
Book implements Taxable
ご存知のように、サブクラスとそのスーパークラス (is-a) の間には関係があります。
Q: と の間に is-a のような関係はありBook
ますTaxable
か?
良い回答ですが、「is-a」は と の間の関係でもあるとおっしゃいましたBook
が、Taxable
「 is-a」はクラス間の関係であり、インターフェイスはクラスではありません。
このクラス階層を考えてみましょう:
Book extends Goods
Book implements Taxable
ご存知のように、サブクラスとそのスーパークラス (is-a) の間には関係があります。
Q: と の間に is-a のような関係はありBook
ますTaxable
か?
良い回答ですが、「is-a」は と の間の関係でもあるとおっしゃいましたBook
が、Taxable
「 is-a」はクラス間の関係であり、インターフェイスはクラスではありません。
はい。関係は全く同じ
本も課税対象です。
編集
インターフェイスは、たまたま Java の (そしておそらく C# のことはわかりません)interface
キーワードに一致するアーティファクトです。
OO インターフェイスでは、クラスが「コミット」されて実行される操作のセットであり、それ以上のものはありません。オブジェクト クラスとそのクライアント間の契約のようなものです。
キーワードを持たない OO プログラミング言語にはinterface
、まだクラス インターフェイス OO の概念があります。
さて、「操作のサポート」があります。個人的には、「is-a」や「can-do」などのニーモニックが非常に役立つとは思いません。私は、タイプが既存の動作を特殊化するのか、動作自体を実装するのかなど、型が許可するものという観点から考えるのを好みます。抽象化のような類推は、漏れやすい傾向があります。インターフェイスの継承と実装の継承の違いを知っていれば、それを表現するために余分な表現は必要ないでしょう。
「…のように振る舞う」
それが私が言うことです。何かではなく、何かのように振る舞う。または、代わりに「何かをすることができます」が、それは行動よりも具体的です。
あるクラスが別のクラスを拡張すると言うとき、それは「継承」として知られる強い関係を持っています。これは、1 つの子が親を拡張すると、子は馬 IS A 動物のような親クラスから何かを継承できる必要があることを意味します。馬はいくつかのプロパティを継承していますanimal .しかし、クラスが別のクラスを実装する場合、子クラスはコントラクトを実装しようとしますが、コントラクトの直後に親から何も継承する必要はありません. (子クラスが継承するため)そして、いくつかを抽象化することができます。
したがって、私にとって拡張は、contract.hope を実装する際の継承とインターフェイスです。
これは次のことを行う必要があります。
public static boolean implementsInterface(Object object, Class interf){
return interf.isInstance(object);
}
例えば、
java.io.Serializable.class.isInstance("a test string")
true と評価されます。
すべての興奮は何ですか?複数の疑問符と複数の感嘆符?
課税対象はインターフェースですが、本が課税対象であると言えるのは気になりませんか?落ち着いてください。
クラスとインターフェースおよびスーパークラスとの関係については、言語に異なるキーワードがありますが、その関係の概念的な性質は同じであるため、同じ英語の用語を使用して説明することは完全に合理的です。本が良いものであるように、本は課税対象です。用語をさらに近づけるために、本は課税対象アイテムです。大丈夫です。
Book implements Taxable
Book
ここでもとの関係Taxable
は
本は課税対象です
これを参照してください。あなたはそれが言うのを見ることができます
継承について話すとき、最も一般的に使用されるキーワードはextendsとimplementsです。これらの単語は、あるオブジェクトが別のオブジェクトのタイプであるかどうかを決定します。