Jav*_*aSa 8 c# oop polymorphism inheritance
考虑我有一些抽象的 Vehicle类和汽车,卡车,摩托车抽象类派生自Vehicle.还想象一下,我必须能够为卡车和摩托车制造基于燃料的汽车或电动汽车等.(具体课程)
两个问题:
1.考虑到我想以多态的方式在车辆中充满能量而不知道它是什么.例如,如果车辆是基于燃料的,我想用燃料填充它,方法应该有3个参数:
void FillUpEnergy(EfuelType i_fuelType,int amounOfEnergy, int maxAmountOfEnergy)
但对于电动车辆,我需要几乎相同的功能,但这次当然没有燃料类型,例如(2个参数):
void FillUpEnergy(int amounOfEnergy, int maxAmountOfEnergy)
Run Code Online (Sandbox Code Playgroud)
我可以FillUpEnergy用上述约束做一个多态方法吗?(不同方法的签名)
2.在我的实现中,所有具体类都有Engine(另一个抽象类)的引用,它代表一个FuelEngine或ElectricEngine(我从Engine派生的其他具体类).例如,我有一个名为的具体类ElectricCar,它包含一个引用ElectricEngine.
这种架构是否足够好或是否有更好的方法来实施车库系统?(在面向对象设计等方面......)
您不能使用不同的签名制作多态"推式"方法,但您可以使用广为人知的访客模式制作多态"拉式"方法.
我们的想法是反转相互作用的序列,并让汽车对象决定做什么:而不是调用的FillUpEnergy,并给予什么车,你觉得需要,打电话FillUpEnergy,让车走它知道它需要,就像这样:
interface IEnergyProvider {
void TakeFuel(EfuelType i_fuelType, int amounOfEnergy);
void TakeElectricity(int amounOfEnergy);
}
interface ICar {
void FillUpEnergy(IEnergyProvider provider);
}
Run Code Online (Sandbox Code Playgroud)
现在你的多态方法的签名是固定的,但是方法的派遣需要两条腿而不是一条腿:
myCar.FillUpEnergy(myProvider)myProvider.TakeFuel或myProvider.TakeElectricity| 归档时间: |
|
| 查看次数: |
3499 次 |
| 最近记录: |