クラスimplements
がインターフェイスの場合、継承をフォローしていると言えますか?クラスがextends
別のクラスの場合、それは継承であることを知っています。
クラスimplements
がインターフェイスの場合、継承をフォローしていると言えますか?クラスがextends
別のクラスの場合、それは継承であることを知っています。
回答:
更新:この回答を修正しました。コメントを求めるに値する多くの良い点が挙げられました。
クラスがインターフェイスを実装している場合、継承をフォローしていると言えますか?
「継承に従う」とはどういう意味かは完全には明らかではありません。少し違う質問をしてみましょうか?
継承とは何ですか?
これらは微妙に異なります。紛らわしいので残念です。
この微妙な違いから通常どのような混乱が生じますか?
継承を実装の詳細を共有するためのメカニズムと考えるため、混乱が生じる可能性があります。それはけれどもあるようなメカニズムが、そのメカニズムは、共有することで動作しますメンバー。それらのメンバーは実装する必要はありません!後で見るように、それらは抽象的です。
この混乱を避けるために、JavaとC#の仕様で「継承」以外の言葉を使用してインターフェイスメソッドとクラスの関係を説明していただければ幸いです。しかし、彼らはそうではない、と我々は理由を持っているから仕様ではなく、反対にそれら。
Javaでは、インターフェイスメンバはそれらを実装するクラスに継承されますか?
はい、いくつかあります。Java仕様セクション8.4.8を参照してください。これは、便宜上、ここで引用しています。
クラスCは、その直接スーパークラスと直接スーパーインターフェースから、次のすべてが当てはまるすべての抽象メソッドとデフォルトメソッドmを継承します。[...]
クラスがインターフェイスを実装すると言うと、クラスはそのインターフェイスの抽象メソッドとデフォルトメソッドを継承します。(もちろん、以下の条件は省略しています。詳細については仕様を参照してください。特に、インターフェイスのメンバーを実装するクラスは、そのメンバーを継承しているとは見なされません。これも混乱しますか?はい。)
通常、Javaではクラスがインターフェイスを継承すると言いますか?
通常、クラスはインターフェイスを実装すると言います。上記のように、クラスはインターフェイスからメンバーを継承できますが、インターフェイスから継承するとは言えません。わかりにくいです、はい。
この微妙な区別は日常業務で重要ですか?
通常はそうではありません。仕様のこの種の狭い解析は、ビジネス開発者よりもコンパイラ作成者にとってより有用です。「継承」の正確な定義を取得するよりも、いつインターフェースを使用するかを理解することが重要です。
java
OPは、他のいくつかの意味がない限り、これが正しい答えであるようjava
:-)
継承とは、スーパークラスの新しいサブクラスを作成することです。インターフェイスに対して新しいクラスを作成すると、そのインターフェイスが実装されます。(古いインターフェースに基づいて新しいインターフェースを作成すると、そのインターフェースが拡張されます。)
3つすべての可能性に適用される唯一の正しい用語は、サブタイピングです。すべてのサブタイプがサブクラスではありません。
サブクラス、あなた
インタフェースには、契約によって気力実装宣言されたメソッドを。
それが古典的な見方です。今でのJava 8のインターフェイスは、混合物になります。
すべてのメソッドにデフォルトの実装があるインターフェースを実装することは、依然として「実装」として、または拡張としてカウントされますか?わかりませんでした。このケースはかなり先取りされているため(これにより、実際にステートレスなマルチ継承が有効になります)、サブクラスでのみ「継承」を使用します。