Java 将子类或超类对象传递给方法(应为超类对象)
我正在处理一些需要向方法发送超类或子类对象的代码 方法public void repairVehicle将仅访问超类对象中的方法Java 将子类或超类对象传递给方法(应为超类对象),java,inheritance,Java,Inheritance,我正在处理一些需要向方法发送超类或子类对象的代码 方法public void repairVehicle将仅访问超类对象中的方法 public class Vehicle { //class stuff } public class Car extends Vehicle { //class stuff } public static void main(String[] args) { // do stuff to determine whether workin
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);
}
}
我想我有三个选择:
保持代码不变,它似乎在工作。-我不喜欢这个选项,这感觉就像我在做假设,我怀疑仅限汽车的方法可能会被意外地调用,从而导致意外行为。
在car中创建getVehicle方法,以返回车辆。然后使用repairCar.getVehicle;-这感觉好多了
换车=新车;到车辆=新车;我相信这将创建一个只能执行vehicle类型方法的对象载体。-这感觉最安全,因为我现在限制可以做什么,以防止意外行为。
如果维修方法仅适用于预期的车辆,那么最好的方法是3吗
此外,我是否可以/应该对:公共无效维修车辆方法声明进行说明
编辑:似乎我应该使用:
让代码保持原样
因为修复方法将子类对象强制转换为超类对象 修复没有定义,但我想你想要这样的东西
public abstract class Vehicle {
//class stuff
}
public class Car extends Vehicle {
//class stuff
}
public class Garage {
public void repair(Vehicle vehicle){
....
}
}
然后您可以将车辆的任何子类传递给修理方法。在这种情况下,它是唯一的汽车,但你可以扩展到自行车,摩托车等
现在,不需要使用if语句进行检查。你可以将你的物品、汽车或其他任何东西传递到维修方法中
你只是变了
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 c = new Car();
Bike b = new Bike();
您的维修方法是什么样子的?当汽车进入维修方法时,它将被隐式地转换为车辆。“所以你们不可能在“修理方法”中使用“汽车方法”。我认为汽车应该扩展汽车。”南德库马尔特卡勒同意。虽然我认为这是一个拼写错误。是的,汽车延伸了汽车,是的,这是一个拼写错误,我意识到这是一个相当重要的错误!编辑以反映这一点…感谢您的回答。我可能没有说清楚,但是需要if语句来确定创建了哪个对象。在对汽车或车辆进行维修之前,还需要做其他工作什么样的其他工作?这是否可以纳入Vehicle类中的常用方法中?如果你需要的话,你可以在里面做一些特别的事情。但是您应该能够在if语句之外调用Repair