0

唯一の操作として領域を含む Shape があるという要件があるとします。では、抽象メソッドとして area() を使用して、インターフェイスまたは抽象クラスを使用する必要がありますか? この質問をする理由は次のとおりです。純粋なオブジェクト指向の用語では、すべての動作がメソッドにマップされ、属性がデータ メンバーにマップされます。それで、領域はクラスの動作または(計算された)属性ですか?そして、特定のユースケースにはどちらが適していますか? メソッドとして area() を使用するインターフェイス、または抽象メソッドとして area() を使用する抽象クラス ?

4

3 に答える 3

2

Interfacesインターフェイス コントラクトをフルフィルするために実装する必要があるジェネリック メソッドがある場合に使用されます。

Abstractクラスは、拡張クラスの大多数の間で共有できるの実装の部分的なデフォルト動作がある場合に使用されます。Interface通常、一部のAbstractクラスであり、一部のメソッドに部分的なデフォルトの動作を提供します。implementsInterface

したがって、計算される形状Interfaceの実装領域が異なるため、クラスarea()を持つ意味がありません。Abstract

例: 円、三角形、長方形では、面積を計算するための式がまったく異なります。クラスのAbstract実装は、継承元のクラスにFourSidedPolygon適している場合がSquareあります。これらは、円以外のオブジェクトにより適しRectangleた汎用クラスの特殊化にすぎないため、おそらく無駄です。Polygon

于 2012-01-25T05:39:52.690 に答える
0

Java は複数の継承をサポートしていないため、この場合はあまり束縛されないので、インターフェースを使用する方が適切です。このタイプのオブジェクトが共有する必要がある、抽象クラスのケースを強化する他の一般的な動作または属性については説明しません。たとえば、領域の出力を使用するすべての形状に共通する別の共有メソッドがある場合、抽象クラスを使用するケースになります。お役に立てれば

于 2012-01-25T05:41:16.073 に答える
-1

抽象クラスは、階層を維持する場合に使用され、インターフェースは、クラスのセットに抽象化のジェネリックレイヤーを提供する場合に使用されます。このクラスを論理階層で使用する場合は、Shapeの抽象クラスを作成する必要があります。あなたの場合、どちらがより適しているでしょう。

于 2012-01-25T06:06:29.927 に答える