这是我的代码总结:
Vehicle.java:
public class Vehicle {
private String enrollment;
public Vehicle (String enrollment){
this.enrollment = enrollment;
}
}
Truck.java:
public class Truck extends Vehicle {
private double pma;
public Truck (String enrollment){
super(enrollment);
}
public void setPma(double pma) {
this.pma = pma;
}
}
Main.java:
Vehicle[] arrayVehicle = new Vehicle[1];
arrayVehicle[0] = new Truck("AAA333");
arrayVehicle[0].setPma............
我无法访问setPma方法。 pma是轨道的ONLY属性,因此它不能在Vehicle类中。那么,无论如何都可以根据需要访问该方法,或者我的类结构是错误的吗?
P.S。:我不想把所有的代码都放在一起,因为这是我参加课程的练习。询问你对代码或目的不了解的任何事情。
答案 0 :(得分:0)
arrayVehicle[0]
是Vehicle
类型的变量。因此,即使它引用类型Truck
的对象,编译器也不知道。编译器唯一知道的是arrayVehicle[0]
是Vehicle
。因此,它不允许您访问Vehicle
类中未定义的方法。
要访问Truck中定义的方法,您需要一个Truck类型的变量:
Vehicle[] arrayVehicle = new Vehicle[1];
Truck truck = new Truck("AAA333");
arrayVehicle[0] = truck;
truck.setPma(...);
答案 1 :(得分:0)
您应该将Vehicle对象强制转换为子类卡车以访问子类方法。你可以使用反射,这也应该有效。
答案 2 :(得分:-1)
你应该把setPMA放在车辆类中。
public class Vehicle {
private String enrollment;
public Vehicle (String enrollment){
this.enrollment = enrollment;
}
private void setPMA(double pma)
{
this.pma = pma;
}
这样做,您可以访问任何子类中的setPMA。