作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的类层次结构
Vehicle
|_ TransaportationVehicle has method getLoadCapacity
|_ PassengerVehicle has method getPassengerCapacity
我还有一个类Booking
,它引用了Vehicle
。
现在,每当我必须在 vehicle
引用上调用 getPassengerCapacity
或 getLoadCapacity
时,我都需要将车辆类型转换为其具体实现,例如 ((PassengerVehicle)vehicle).getPassengerCapacity()
并且此类调用跨越项目中的多个部分。那么有什么方法可以避免这些类型的转换,并且我的代码看起来又漂亮又干净呢?
注意:这些不是实际的类,我以它们为例来演示当前的问题。
最佳答案
显然,在预订 Vehicle
时,您需要在某些时候区分它是 TransportationVehicle
还是 PassengerVehicle
,因为两者具有不同的属性。
最简单的方法是启动两种不同的预订
流程:一种适用于可以运输 cargo 的车辆,另一种适用于可以运输乘客的车辆。至于如何区分这两种类型的车辆:可以在Vehicle
中添加canTransportPassengers()
和canTransportGoods()
方法,子类将然后重写这些方法以在适当的情况下返回 true
。此外,通过这种方式,可以运输两者的车辆成为可能,例如火车。
关于java - 避免显式强制转换的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34152303/
我是一名优秀的程序员,十分优秀!