gpt4 book ai didi

java - 使用instanceof从父函数列表中调用子函数的替代方法

转载 作者:行者123 更新时间:2023-12-02 12:05:37 24 4
gpt4 key购买 nike

考虑这段代码:

public class Vehicle{
private int pos_x;
private int pos_y;

public void update(float delta){
move(delta); // function move() isn't shown here but modifies pos_x and pos_y
}
}

public class Car extends Vehicle{
private int speed = 10;

@Override
public void update(float delta){
super.update(delta * speed);
}
}

public class Tank extends Vehicle{
private int speed = 3;
private int munitions = 100;

@Override
public void update(float delta){
super.update(delta * speed);
}

public void shoot(){
// Do something
}
}

public void main(String[] args){
List<Vehicle> vehicles = new ArrayList<Vehicle>();
vehicles.add(new Car());
vehicles.add(new Tank());

while(true){
float delta = getElapsedTimeSinceLastLoop(); // not shown
for(Vehicle v : vehicles){
v.update(delta);
if(playerIsHoldingDownShootButton())((Tank)v).shoot();
}
sleep(); // not shown
}
}

如果我不尝试将 v 转换到 Tank,我将无法访问 shot() 函数。如果我尝试将 v 转换为 Tank,则会收到错误,因为车辆列表包含一辆汽车,无法将其转换为 Tank。我可以避免该错误的唯一方法是测试 if(v instanceof Tank) 然后转换为 Tank。

但是如果我有很多具有不同功能的车辆类型怎么办?

编辑:感谢@ScaryWombat,我稍微重写了这个问题以更接近我的实际问题。

最佳答案

在 main 方法中,只需对所有车辆调用 update() 即可。让坦克在自己的更新方法中自行决定是否射击。

关于java - 使用instanceof从父函数列表中调用子函数的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46927350/

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