我正在使用一些需要将超类或子类对象发送到方法的代码。
方法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);
}
}
我想我有三个选择:
repair(Car.getVehicle());
- 感觉好一点Car = new Car();
更改为Vehicle = new Car();
我相信会创建一个只能执行车辆类型方法的对象(车辆)。 - 这是最安全的,因为我现在限制可以做的事情,以防止意外行为。3,这是最好的方法,因为修理方法只是期待车辆吗?
另外,我可以/应该对public void repair(Vehicle vehicle)
方法声明做什么吗?
编辑:我似乎应该使用:
保留代码
因为repair()
方法无论如何都将子类对象强制转换为超类对象。
答案 0 :(得分:6)
没有修复的定义,但我认为你想要这样的东西
public abstract class Vehicle {
//class stuff
}
public class Car extends Vehicle {
//class stuff
}
public class Garage {
public void repair(Vehicle vehicle){
....
}
}
然后,您可以将Vehicle的任何子类传递给修复方法。在这种情况下它只是汽车,但你可以延伸到自行车,摩托车等。
现在您不需要使用if语句进行检查。您可以将对象(或Car或其他任何内容)传递到repair
方法。
你刚刚成为
public static void main(String[] args) {
Garage g = new Garage();
Vehicle c = new Car();
Vehicle b = new Bike(); //assuming Bike is a subclass of Vehicle.
g.repair(c);
g.repair(b);
}
如果在访问变量b和c时需要Car and Bike特定方法,那么您可以将其声明更改为
Car c = new Car();
Bike b = new Bike();