【发布时间】:2019-05-06 20:06:34
【问题描述】:
我有一个父类Fruit 和子类FruitUnit、FruitWeight 和FruitVolume,描述了如何购买不同类型的水果。
我必须创建一个接口来实现方法payFruit(),因为fruit 的所有子类都必须实现这个。
interface IFruitPayment {
double payFruit();
}
假设计算payFruit() 的方法对于每个子类(数量*价格、单位*价格、重量*价格)都不同,我如何创建任何父 Fruit 对象并访问方法 payFruit()儿童班?
在父类中实现 payFruit() 返回 0 的方法解决了这个问题,因为子类可以覆盖它,但看起来不对。
假设我有一个水果数组列表,我想迭代它们以获取方法 payFruit() 的值。
实现这一目标的最佳和最干净的方法是什么?
简介:
在水果店,所有水果都有名称和底价。这家商店以三种方式销售水果:统一、重量和体积。总价的计算方法是将基本价格乘以单位数量、重量或体积,视情况而定。任何类型的水果(例如香蕉、橙子、苹果)都可以按单位、重量或体积进行销售。它旨在开发具有类层次结构的 Java 项目。 The FruitUnit, FruitWeight and FruitVolume classes inherit from the Fruit class。还应该有一个代表要购买的各种水果的 Basket 类。此类应包括以下方法:
- 将购买的指定水果放入购物篮;
- 计算所购水果的总价值;
- 计算给定类型水果(水果名称)的总花费
为了与其他项目的类兼容,执行支付金额计算的方法将在各个类中使用,名称为 payFruit,返回类型为 double 且无参数。该方法必须在接口中声明。
注意: 我知道这对我来说可能看起来很特殊,对其他人来说不是很有帮助,但我发现这个类层次结构有点令人困惑。
【问题讨论】:
-
那个类层次结构没有意义。这些子类不代表水果的种类。
-
让
Fruit实现IFruitPayment并创建类abstract。然后您可以在Fruit对象上使用payFruit()方法,因为该方法是在那里定义的(实际上是在接口中)。 -
如前所述,您的子类没有通过 is-a 测试。 FruitUnit is-a Fruit, FruitWeight is-a Fruit?我不这么认为。
-
你说你必须创建一个接口?这是上课的吗?
-
除了令人困惑的类层次结构,为什么在这种情况下需要接口?难道你不能把
Fruit抽象化,把payFruit()抽象化吗?除非你有其他非水果类需要payFruit(),否则使用接口没有多大意义。
标签: java