我正在处理一些需要将一个超类或子类对象发送给方法的代码。将子类或超类对象传递给方法(期待超类对象)
方法public void repair(Vehicle vehicle)
将只访问超类对象中的方法。
public class Vehicle {
//class stuff
}
public class Car extends Vehicle {
//class stuff
}
public static void main(String[] args)
{
// do stuff to determine whether working with a vehicle or car
if (someCondition)
{
Car = new Car();
// do some stuff...
repair(Car);
}
else
{
Vehicle = new Vehicle();
// do some stuff...
repair(Vehicle);
}
}
我想我有三种选择:
- 离开的代码,因为它是,它似乎是工作。 - 我不喜欢这个选项,感觉就像我在做假设,我怀疑只有汽车的方法可能会被意外地称为做这件事,导致意想不到的行为。
- 在车里创建一个getVehicle()方法,返回一个Vehicle。然后使用
repair(Car.getVehicle());
- 这感觉好一点 - 更改
Car = new Car();
到Vehicle = new Car();
,我相信会创建一个对象(车辆),只能执行类型车辆的方法。 - 这感觉是最安全的,因为我现在限制了可以做的事情,以防止意外的行为。
是3,最好的方法,因为修理方法只是期待车辆?
另外,有什么我可以/应该去的:public void repair(Vehicle vehicle)
方法声明?
编辑:看来我应该使用:
离开的代码,因为它是
因为repair()
方法铸子类对象的父对象呢。
那么你的修法样子? – RNJ
当汽车进入修理方法时,它会隐式地投射到车辆上。所以你不可能在维修方法中使用Car方法。 – BeRecursive
我认为汽车应该延伸车辆。 –