0

假设我有一个要求,其中我有包含区域作为唯一操作的形状。那么我应该使用 area() 作为抽象方法的接口还是抽象类?问这个问题的原因是:在纯面向对象术语中,所有行为映射到方法,属性映射到数据成员。那么面积是类的行为或(计算的)属性?哪一个更适合特定用例?以 area() 作为方法的接口或以 area() 作为抽象方法的抽象类的接口?

4

3 回答 3

2

Interfaces当存在必须实现的泛型方法来满足接口契约时使用。

Abstract当一个实现的某些部分Interface默认行为可以在大多数扩展类之间共享时,将使用类。通常是一个Abstract类,并为implements某些方法Interface提供部分默认行为。

所以我会有一个Interface带有该方法的形状,因为要计算的形状的实现区域会有所不同,拥有一个类area()是没有意义的。Abstract

示例:圆形、三角形和矩形的面积计算公式完全不同。类的Abstract实现FourSidedPolygon可能适用于要继承SquareRectangle类,这可能是浪费精力,因为它们只是泛型Polygon类的特化,更适合非圆形对象。

于 2012-01-25T05:39:52.690 回答
0

因为java不支持多重继承,所以在这种情况下你最好使用接口,因为你不会被束缚太多。您没有描述这种类型的对象必须共享的任何其他常见行为或属性,这会加强抽象类的案例。例如,如果您有另一个使用面积输出的所有形状共有的共享方法,那么就可以使用抽象类。希望这可以帮助

于 2012-01-25T05:41:16.073 回答
-1

当您想要维护层次结构时使用抽象类,当您为一组类提供通用抽象层时使用接口。如果你想在逻辑层次结构中使用这个类,那么你应该为 Shape 编写抽象类。哪个更适合您的情况。

于 2012-01-25T06:06:29.927 回答