gpt4 book ai didi

java - 我可以将对象从子类传递到抽象类吗?

转载 作者:行者123 更新时间:2023-11-30 07:13:58 24 4
gpt4 key购买 nike

这是实现 Vehicles 接口(interface)的抽象类 AbstractVehicles

public abstract class AbstractVehicles implements Vehicles{

}

这是我的 CarImpl

public class CarImpl extends AbstractVehicles implements Car {
private CarAI ai;
private static final int CAR_FUEL_LEFT = 10;
public CarImpl(){
super(FUEL_LEFT);
this.ai = new CarAI();
}
public void move(World w){
// AI is using here
ai.act(w);
}
}

这是我的 BicycleImpl

public class BicycleImpl extends AbstractVehicles implements Bicycle {
private BicycleAI ai;
private static final int BICYCLE_FUEL_LEFT = 10;
public BicycleImpl(){
super(BICYCLE_FUEL_LEFT);
this.ai = new BicycleAI();
}
public void move(World w){
// AI is using here
ai.act(w);
}
}

其中 Car 和 Bicycle 的接口(interface)是标记接口(interface)

public interface Car extends Vehicles {
}


public interface Bicycle extends Vehicles {
}

问题来了我在其他包中分别为汽车和自行车实现了 AI称为 BicycleAI 和 CarAI。但是他们的 CarImpl 和 BicycleImpl 中的代码是相同的。所以我想把它添加到抽象类中,这样代码就可以重用了。类 BicycleAI 和类 CarAI 正在实现接口(interface) AI。

正如我们在上面看到的,他们的行为代码是相同的,但是AI对象不同。无论如何我可以把这段代码放到抽象类中吗?

我试过了

public abstract class AbstractVehicles implements Vehicles{
protected AI ai;
private int fuelLeft;
public AbstractVehicles(int fuelLeft){
this.fuleLeft = fuelLeft
AI ai = new AI();
}
public void move(World w){
ai.act(w); // But I have no idea this is CarAI or BicycleAI
}
}

我对 AbstractVehicles 中的构造函数和 RabbitImpl 中的构造函数有点困惑。如果我创建了一个对象 RabbitImpl,并且我调用了 move。

最佳答案

AI 传递给抽象类的构造函数。

 public abstract class AbstractVehicles implements Vehicles{
protected final AI ai;
public AbstractVehicles(AI ai){
this.ai = ai;
}
public void move(World w){
ai.act(w);
}
}

public class CarImpl extends AbstractVehicles implements Car {
public CarImpl(){
super(new CarAI());
}
}

关于java - 我可以将对象从子类传递到抽象类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831891/

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