領域が操作のみであるShapeが必要な場所があるとします。だから私は、抽象メソッドとしてarea()を持つインターフェイスまたは抽象クラスに行く必要がありますか?この質問の背後にある理由は、純粋なオブジェクト指向の用語では、すべての動作がメソッドおよび属性にマッピングされ、データメンバにマップされます。領域はクラスの振る舞いまたは(計算された)属性ですか?特定のユースケースではどちらが優れていますか?メソッドとしてarea()とのインタフェース、またはabstractメソッドとしてarea()を持つAbstractクラス?インタフェースまたは抽象クラス。私のユースケースではどれが適していますか?
0
A
答えて
2
Interfaces
は、がインターフェイス契約をfullfilに実装する必要がある汎用メソッドがある場合に使用されます。延びるクラスの大部分の間で共有することができるInterface
の実装の一部部分デフォルトの動作がある場合
Abstract
クラスが使用されています。通常Abstract
クラスimplements
一部Interface
と部分いくつかの方法のデフォルトの動作を提供します。
したがって、計算する図形の実装領域は、Abstract
クラスを持つ意味がないので、の方法はarea()
です。
例:円、三角形、四角形は、面積を計算するための式がまったく異なります。 FourSidedPolygon
クラスの実装は、Square
クラスとRectangle
クラスが継承するのが適切な場合があります。これは、非円オブジェクトの方が適切な汎用Polygon
クラスの特殊化であるため、おそらく労力の無駄です。
0
javaはマルチプル継承をサポートしていないため、この場合はインターフェイスが優れているため、あまり束縛されません。この種のオブジェクトが共有しなければならない、抽象クラスのケースを強化した他の共通の動作や属性は記述しません。たとえば、領域のアウトピットを使用するすべてのシェイプに共通の別の共有メソッドがある場合、抽象クラスを使用することができます。これが役に立ちますようにお願いします。
-1
抽象クラスは、階層を維持したいときに使用され、クラスのセットに抽象化の一般的なレイヤーを与えるときにインターフェイスが使用されます。 このクラスを論理階層で使用する場合は、ShapeのAbstractクラスを記述する必要があります。あなたの場合にはもっと適しています。
関連する問題
- 1. Javaの抽象クラスは、私はそれを実装して、次のインタフェースと抽象クラスを持つインタフェース
- 2. 抽象クラスまたはインタフェース。正しい方法は?
- 3. 抽象クラスはインタフェースのメソッドを隠すか、またはオーバーライドしますか?
- 4. インタフェースと抽象クラス
- 5. インタフェースと抽象クラス?
- 6. インタフェースと抽象クラス
- 7. c#インタフェース、抽象クラス、強制継承クラスを抽象クラスではない
- 8. 抽象クラスとのインタフェース
- 9. インタフェースと抽象クラスのコンストラクタ?
- 10. 抽象クラスV/sのインタフェース
- 11. 抽象クラスまたはインタフェースのpublic static finalフィールド
- 12. 関数の引数:抽象クラスまたはインタフェース?
- 13. 抽象クラスを抽象クラスで模擬しています
- 14. 抽象基本クラスまたはインタフェース?どちらも思えない右
- 15. インタフェース対抽象クラスC++
- 16. PHP抽象クラスとインタフェース
- 17. インタフェース対100%抽象クラス
- 18. インタフェースを実装した抽象クラスをコンパイルできません
- 19. この状況では、インタフェースまたは抽象クラスを使用する方がよいでしょうか?
- 20. 抽象クラス内のインタフェース実装のチェックはアンチパターンですか?
- 21. Eclipseパッケージエクスプローラには、ファイルタイプごとにアイコン、インタフェース、抽象クラスなどがあります。
- 22. .NET私は、次の抽象クラスを持つ抽象クラスから
- 23. 新しい階層を構築するには、抽象クラスまたはインタフェースを使用しますか?
- 24. org.hibernate.InstantiationException:抽象クラスまたはインタフェースをインスタンス化できません:device.Dispositivo
- 25. java.sql.Statementが抽象クラスではなく、インタフェースであるのはなぜですか?
- 26. 抽象クラスはC#で実装されていますか?
- 27. 抽象クラスとインタフェースをいつ使用するのですか?
- 28. 抽象クラスまたは部分クラス?
- 29. この場合のインタフェースと抽象クラス
- 30. 製品クラスのインタフェースまたは抽象スーパークラスのファクトリメソッドを定義する