【发布时间】:2016-04-22 16:41:59
【问题描述】:
因此,作为汽车租赁系统的一部分,我需要编写类来表示大型和小型汽车,它们之间的区别在于它们具有不同大小的油箱并以不同的速率消耗燃料。目前我的方法是有一个接口 Car,由抽象类 AbstractCar 实现,它由两个具体类 SmallCar 和 LargeCar 扩展。然而,这是我第一次使用接口和抽象类(我们只是在课堂上介绍它们,这个作业旨在评估我们对它们的了解),我不知道在什么类中放置什么。
fill方法的实现完全一样,只需要引用FUEL_CAPACITY的正确值,所以感觉应该是在AbstractCar类中实现了这些方法,后来不知道怎么弄参考正确的 FUEL_CAPACITY 值。字段fuelLevel显然也被所有汽车持有,所以我觉得我应该在AbstractCar中声明它,但是如果不删除它的隐私,我就不能从子类中访问它。
谁能帮我弄清楚我做错了什么或对接口和继承有误解?我一直在考虑的一件事是生成一个枚举 CarType,让 AbstractCar 将 CarType 作为一个字段,并且所有实现都在 AbstractCar 类中完成,使用 if 语句切换到正确的 FUEL_CAPACITY 值,并简单地使用 SmallCar 和 LargeCar 作为构造函数或没有太多甚至没有任何实际实现的工厂类。
提前感谢您提供的任何帮助' 但不一定是正确或最优雅的解决方案。
【问题讨论】:
-
您可以将逻辑与值一起传输到
AbstractCar。然后只需在SmallCar和LargeCar的委托人中设置这些值。这将是一种方法。就像您指出的那样,您始终必须在父类中具有通用逻辑。您想避免重复代码。然后你只需要确保你在构造函数中设置了不同的值。如果您知道固定值,您甚至可以省略给SmallCar或LargeCar提供参数,而只需在构造函数内的super()调用中设置这些固定值。
标签: java inheritance interface abstract class-hierarchy