我正在努力实施一个帮助车辆社会
但我首先关注车辆部件 车辆可以是HeadQuarter或机器
然后将机器指定为支持车辆(SV)或紧急车辆(EV)
EV和SV都扩展了扩展车辆的机器
机器是特别的,因为它们可以传输人员,所以我在机器类中定义了一个方法Embark(String),它将字符串存储在arraylist中,这是机器类的一个属性。
然后我进入了社会实施,一个社会有一个车辆的ArrayList(可以是一台机器(指定成EV或SV)或HQ)但是当我试图将人们带入SV时,我无法访问机器方法
我真的不明白为什么有人可以解释我?非常感谢你
这是Society.java
import Vehicle.*;
import Vehicle.machine.SupportVehicle;
import Vehicle.machine.EmergencyVehicle;
import Vehicle.machine.*;
public class Society {
private ArrayList <Vehicle> Vehicles;
public void AddVehicle(Vehicle V1){
this.Vehicles.add(V1);
}
public Society(){
this.Vehicles = new ArrayList<Vehicle>();
}
public static void main(String[] args){
Society S;
S = new Society();
SupportVehicle SV;
SV = new SupportVehicle();
Vehicle V1;
V1 = new Vehicle();
S.AddVehicle(V1);
S.Vehicles.get(0).embark("bar"); // Embark is a Machine Method but i can't access it : " The method Embark(string) is undefined for the type Vehicle
}
}
答案 0 :(得分:1)
问题是这个“所以我在机器类中定义了一个方法Embark(String)”,你想从车辆中访问该方法。
机器扩展车辆,因此车辆无法访问机器的方法。
一种可能的解决方案是将该方法添加到Vehicle类。
另一种解决方案是使用私有ArrayList计算机而不是私有ArrayList Vehicles;
如果你想使用((机器)S.Vehicles.get(0))。embark(“bar”);你应该首先检查instance =“if S.Vehicles.get(0)instanceof Machine”
PS:变量应以小写=)
开头答案 1 :(得分:0)
您的问题是,您通过Vehicle
- 类“眼镜”“查看”您的对象,因为您想在S.Vehicles.get(0)
上调用该方法而Vehicles
是一个列表类型为Vehicle
。在这种情况下,您只能看到Vehicle
- 类的功能。要查看Machine
- 类的方法,您需要将对象强制转换为Machine
- 类首先:
((Machine)S.Vehicles.get(0)).embark("bar");
答案 2 :(得分:0)
embark( String str)
是在Machine
类和Vehicle
类中定义的方法。编译器不知道Society.Vehicles
包含Machine
类的实例,因为它可能包含Vehicle Class本身或其他扩展的实例。
1)如果您知道社会中的所有车辆实例都是机器实例,而不仅仅是按照以下方式更改车辆类型
private ArrayList <Machine> Vehicles;
2)如果以上情况不是真的,那么将有助于
if(S.Vehicles.get(0) instanceof Machine)
{
((Machine)S.Vehicles.get(0)).embark("Something");
}
答案 3 :(得分:0)
大家好,谢谢大家的回答,我全部阅读,我发现这个问题是编译问题, 我在vechile中添加了一个方法embark(string n1),并在机器中覆盖它,这样当我执行我的代码时,一切顺利