Java 将子类或超类对象传递给方法(应为超类对象)

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 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 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