2012-01-25 1 views
0

領域が操作のみであるShapeが必要な場所があるとします。だから私は、抽象メソッドとしてarea()を持つインターフェイスまたは抽象クラスに行く必要がありますか?この質問の背後にある理由は、純粋なオブジェクト指向の用語では、すべての動作がメソッドおよび属性にマッピングされ、データメンバにマップされます。領域はクラスの振る舞いまたは(計算された)属性ですか?特定のユースケースではどちらが優れていますか?メソッドとしてarea()とのインタフェース、またはabstractメソッドとしてarea()を持つAbstractクラス?インタフェースまたは抽象クラス。私のユースケースではどれが適していますか?

答えて

2

Interfacesは、がインターフェイス契約をfullfilに実装する必要がある汎用メソッドがある場合に使用されます。延びるクラスの大部分の間で共有することができるInterfaceの実装の一部部分デフォルトの動作がある場合

Abstractクラスが使用されています。通常Abstractクラスimplements一部Interface部分いくつかの方法のデフォルトの動作を提供します。

したがって、計算する図形の実装領域は、Abstractクラスを持つ意味がないので、の方法はarea()です。

例:円、三角形、四角形は、面積を計算するための式がまったく異なります。 FourSidedPolygonクラスの実装は、SquareクラスとRectangleクラスが継承するのが適切な場合があります。これは、非円オブジェクトの方が適切な汎用Polygonクラスの特殊化であるため、おそらく労力の無駄です。

0

javaはマルチプル継承をサポートしていないため、この場合はインターフェイスが優れているため、あまり束縛されません。この種のオブジェクトが共有しなければならない、抽象クラスのケースを強化した他の共通の動作や属性は記述しません。たとえば、領域のアウトピットを使用するすべてのシェイプに共通の別の共有メソッドがある場合、抽象クラスを使用することができます。これが役に立ちますようにお願いします。

-1

抽象クラスは、階層を維持したいときに使用され、クラスのセットに抽象化の一般的なレイヤーを与えるときにインターフェイスが使用されます。 このクラスを論理階層で使用する場合は、ShapeのAbstractクラスを記述する必要があります。あなたの場合にはもっと適しています。

関連する問題