我有一个父类Fruit
和子类FruitUnit
,FruitWeight
和FruitVolume
,描述了如何购买水果的不同类型。
我必须创建一个接口来实现方法payFruit()
,因为所有水果子类都必须实现此方法。
interface IFruitPayment {
double payFruit();
}
假定每个子类的payFruit()
计算方法不同(数量*价格,单位*价格,重量*价格),我如何创建任何父Fruit
对象并访问该方法子类的payFruit()?
在父类中实现方法payFruit()
返回0可以解决此问题,因为子类可以覆盖它,但看起来并不正确。
假设我有一个水果数组列表,我想对其进行迭代以获取方法payFruit()
的值。
实现此目标的最佳方式是什么?
简介:
在水果店中,所有水果都有名称和底价。商店以三种方式销售水果:统一,重量和体积。通过将基本价格乘以单位数量,重量或体积(视具体情况而定)来计算总价格。任何类型的水果(例如香蕉,橙子,苹果)都可以按单位,按重量或按体积出售。它旨在开发具有类层次结构的Java项目。 The FruitUnit, FruitWeight and FruitVolume classes inherit from the Fruit class
。还应该有一个篮类,代表要购买的各种水果。此类应包含以下方法:
为了与其他项目的类兼容,将执行要在各种类中使用的要支付的金额的计算方法,该方法的名称为payFruit,返回类型为double,并且没有参数。此方法必须在接口中声明。
注意: 我知道这对我来说似乎很特殊,对其他人不是很有帮助,但是我发现使用此类的层次结构有点令人困惑。
答案 0 :(得分:0)
好吧,所以基本上您希望子类实现chk1
接口。
如果每个子类都实现该接口,则可以将它们用作该接口。
IFruitPayment
答案 1 :(得分:0)
您可能正在这里寻找其他结构。很难想象FruitUnit
的{{1}}子类。这是因为Fruit
不是一种水果。您希望子类实现它是一个单独的接口。
这样说,您可以声明IFruitPayment
实现Fruit
,使IFruitPayment
,FruitUnit
和FruitWeight
extend { {1}}并具有FruitVolume
的子类来实现其中之一...
IFruitPayment
除非您需要检查特定的实现类型,否则您应该能够摆脱这三个接口,因为Fruit
提供了API。但是否则:
abstract class Fruit implements IFruitPayment {}
实际的子类将实现相应的接口:
IFruitPayment
现在,IMO有一点冗余。如果子接口有理由,也许它们应该拥有自己的更干净的API,例如通过声明特定于其自身类型的方法。这是一个虚构的示例,只是为了说明这个想法:
interface FruitUnit extends IFruitPayment{}
interface FruitWeight extends IFruitPayment{}
interface FruitVolume extends IFruitPayment{}
但除非需要,否则实际上不需要三个子接口。
答案 2 :(得分:0)
要弄清楚一个水果要花多少钱,您实际上有两个问题:
核心Fruit
(无论是抽象类还是接口)只需提供所有实现都必须实现的double getUnit()
。从那里开始,这取决于您要变得多么复杂。如果这只是一个简单的练习,我会考虑添加另外两种方法-一种返回单位价格,另一种获得水果的成本(将它们乘以在一起)。
您可能会争辩说,单位价格并不是Fruit
的问题;在这种情况下,您可能有一个完整的其他服务知道每个Fruit
的价格,那就是可以进行乘法的服务。
编辑:对于特定的实现,计算其“单位”值时,体积,重量,颜色等都是各自重要的,但取决于您以及情况是否值得在公共界面上使用