gpt4 book ai didi

java - 将子类或父类(super class)对象传递给方法(需要父类(super class)对象)

转载 作者:行者123 更新时间:2023-12-01 07:11:47 25 4
gpt4 key购买 nike

我正在处理一些需要将父类(super class)或子类对象发送到方法的代码。

方法public void Repair(Vehiclevehicle)将仅访问父类(super class)对象中的方法。

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);
}
}

我想我有三个选择:

  1. 保持代码不变,它似乎可以工作。 - 我不喜欢这个选项,感觉就像我在做出假设,并且我怀疑仅汽车方法可能会被意外调用,从而导致意外行为。
  2. 在 car 中创建一个 getVehicle() 方法,以返回一个 Vehicle。然后使用 repair(Car.getVehicle()); - 这感觉好一点
  3. Car = new Car(); 更改为 Vehicle = new Car(); 我相信这会创建一个只能执行 类型方法的对象(车辆)车辆。 - 这感觉是最安全的,因为我现在限制可以做的事情,以防止意外行为。

考虑到修复方法只需要车辆,3 是最好的方法吗?

另外,我可以/应该对:public void Repair(Vehiclevehicle)方法声明做些什么吗?

编辑:看来我应该使用:

Leave the code as it is

因为 repair() 方法无论如何都会将子类对象转换为父类(super class)对象。

最佳答案

修复没有定义,但我认为你想要这样的东西

public abstract class Vehicle {
//class stuff
}

public class Car extends Vehicle {
//class stuff
}


public class Garage {
public void repair(Vehicle vehicle){
....
}
}

然后您可以将 Vehicle 的任何子类传递给修复方法。在本例中,它只是汽车,但您可以扩展到自行车、摩托车等。

现在您不需要使用 if 语句进行检查。您可以将您的对象(或汽车或其他任何东西)传递到 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 c = new Car();
Bike b = new Bike();

关于java - 将子类或父类(super class)对象传递给方法(需要父类(super class)对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12836644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com