私はJava初心者なので、質問が単純すぎたり複雑すぎたりする場合はご容赦ください。ただし、Javaの本を読んでいて、最初の章で継承について説明し、後でインターフェイスにたどり着きました。
私の質問は次のとおりです。インターフェイスを使用するのが正しいのはいつですか。代わりにメソッドをオーバーライドするのはいつですか?
オーバーライド機能が既にあるのに、なぜインターフェイスが必要なのでしょうか?
私はJava初心者なので、質問が単純すぎたり複雑すぎたりする場合はご容赦ください。ただし、Javaの本を読んでいて、最初の章で継承について説明し、後でインターフェイスにたどり着きました。
私の質問は次のとおりです。インターフェイスを使用するのが正しいのはいつですか。代わりにメソッドをオーバーライドするのはいつですか?
オーバーライド機能が既にあるのに、なぜインターフェイスが必要なのでしょうか?
このページを見てください: http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html。いくつかの違いと、それぞれをいつ使用する必要があるかについて説明します。
またはこれ: http://www.javabeginner.com/learn-java/java-abstract-class-and-interface。こっちの方がいいと思います。
ここで他の人が良い点を指摘していますが、少し異なる視点を提供させてください.
オブジェクト間で共通の動作 (コードやトレイトではありませんが、実際の動作) がある場合は、メソッドで確立された動作を持つ (おそらく宣言されたfinal
) 抽象クラスを検討してください。しかし、注意してください。Circle- Ellipse問題を調べて、なぜ Circleが Ellipse から継承すべきでないのかを確認してください。
拡張できるクラスは 1 つだけなので、適切なクラスにしてください。ただし、優れたソフトウェア設計とは、コードをできるだけ疎結合することであることに注意してください。つまり、あるクラスのコードを変更しても、他のクラスのコードを変更しないようにできる限り注意してください。そのため、週末の作業が発生します。継承ほど緊密な結合はないため、賢明に選択してください。基本クラスに新しい動作を追加すると、すべての派生クラスもそれを取得することになり、多くの厄介な問題が発生する可能性があります (たとえば、コントラクトを満たすためだけに空のメソッドを実装することで解決されます)。
最後に、複数のインターフェイスを拡張する機能により、クライアント コードは異なる API コントラクトに従ってオブジェクトを異なる方法で処理できるため、Person
オブジェクトをDoctor
コードの一部では として扱い、コードのFather
別の部分では として扱うことができます。ただし、これは多重継承ではありません。
最終的には、ドメイン、基本クラスへの変更の可能性、および経験から測定することを学ぶその他の要因に依存します。ただし、すべてが同じであるため、継承よりもインターフェイスを優先します。
そして、Ruby と Scala を学び、モジュールと trait について学ぶまで待ってください。そしたらめちゃくちゃ楽しくなる。
それが役立つことを願っています。