【发布时间】:2015-01-14 14:45:46
【问题描述】:
我正在尝试创建一个 java 程序,其中我有一个父类 MotorVehicle 和许多不同的子类,即 Car、Bus 和 Truck。现在,MotorVehicle 有 6 个数据成员,其他每个类都有 2 个不同的数据成员。
在我的主要方法中,我创建了一个ArrayList<MotorVehicle> myArrayList,并创建了Car、Bus 和Truck 的对象并将它们添加到这个数组列表中。例如,对于car 我愿意:
Car newCar = new Car (all, the, parameters, common, and, class, specific);
myArrayList.add(newCar);
Bus 和 Truck 也是如此。在执行期间,我看到数组列表中的新实例或条目正在覆盖现有项目的 MotorVehicle 参数。
例如:如果我在列表中有一个现有的Car 实例。然后我添加了一个Bus 实例,Bus 实例中属于MotorVehicle 类的6 个数据成员覆盖了现有Car 实例中属于MotorVehicle 类的6 个数据成员。
我认为这样做可能会解决问题(但遗憾的是,它没有):
MotorVehicle newCar = new Car (all, the, parameters, common, and, class, specific);
就是把类型改成MotorVehicle
同样在各自的类中,我有一个构造函数,定义如下:例如汽车:
public Car(all, the, parameters, common, and, class, specific){
super(all the 6 data members of the MotorVehicle class);
//Set the local variables - specific to Car
}
知道我哪里可能出错了吗?
CAR.java :汽车类
public class Car extends MotorVehicle{
private int numberDoors;
private String color;
public Car(){
}
public Car(int numberDoors, String color){
setNumberDoors(numberDoors);
setCarColor(color);
}
/*
Need to add date
*/
public Car(String vehicleType, int numberWheels, double engineSize, boolean powerSteering, String purchaseDate, int numberDoors, String color, String serialNumber){
super(vehicleType, numberWheels, engineSize, powerSteering, purchaseDate, serialNumber);
setNumberDoors(numberDoors);
setCarColor(color);
}
private void setNumberDoors(int numberDoors) {
this.numberDoors = numberDoors;
}
public int getNumberDoors(){
return numberDoors;
}
private void setCarColor(String color) {
this.color = color;
}
private String getCarColor(){
return color;
}
public String toString(){
//Does printing
}
}
MotorVehicle.java :父类
public class MotorVehicle {
static private String vehicleType;
static private int numberWheels;
static private double engineSize;
static private boolean powerSteering;
static private String purchaseDate;
static private String serialNumber;
//null constructor
public MotorVehicle()
{
}
//constructor with single parameter of type string
public MotorVehicle ( String vehicleType)
{
setVehicleType(vehicleType);
}
//constructor with five parameters of type string, integer, double, boolean
public MotorVehicle(String vehicleType, int numberWheels,double engineSize,boolean powerSteering, String
purchaseDate, String serialNumber)
{
setVehicleType(vehicleType);
setNumberWheels(numberWheels);
setEngineSize(engineSize);
setPowerSteering(powerSteering);
setPurchaseDate(purchaseDate);
setSerialNumber(serialNumber);
}
public void setVehicleType (String vehicleType )
{
this.vehicleType=vehicleType;
}
static public String getVehicleType ()
{
return vehicleType;
}
public void setNumberWheels (int numberWheels)
{
this.numberWheels=numberWheels;
}
static public int getNumberWheels()
{
return numberWheels;
}
public void setEngineSize( double engineSize)
{
this.engineSize=engineSize;
}
static public double getEngineSize( )
{
return engineSize;
}
public void setPowerSteering (boolean powerSteering)
{
this.powerSteering=powerSteering;
}
static public boolean getPowerSteering()
{
return powerSteering;
}
public void setPurchaseDate (String purchaseDate )
{
this.purchaseDate=purchaseDate;
}
static public String getPurchaseDate ()
{
return purchaseDate;
}
public void setSerialNumber (String serialNumber)
{
this.serialNumber=serialNumber;
}
static public String getSerialNumber()
{
return serialNumber;
}
@Override
public String toString() {
//Does printing
}
}
添加函数 :在主类中
add(ArrayList<MotorVehicle> myArrayList)
{
System.out.print("Enter vehicle type- CAR, BUS, TRUCK, OTHER: ");
type = sc.next();
if (type.equalsIgnoreCase("Car")) {
int wheels = 0, doors = 0;
String date = "", color = "", serialNo = "";
boolean powerSteering = false;
double eSize = 0.0;
System.out.print("Enter the number of wheels: ");
wheels = sc.nextInt();
System.out.print("Enter the enginer size in cc: ");
eSize = sc.nextDouble();
System.out.print("Enter true for power steering else false: ");
powerSteering = sc.nextBoolean();
System.out.print("Enter the purchase date as mm/dd/yyyy: ");
date = sc.next();
System.out.print("Enter the vehicle serial number: ");
serialNo = sc.next();
System.out.print("Enter the number of doors: ");
doors = sc.nextInt();
System.out.print("Enter the car's color: ");
color = sc.next();
MotorVehicle newCar = new Car("Car", wheels, eSize, powerSteering, date, doors, color, serialNo);
myArrayList.add(newCar);
}
【问题讨论】:
-
提供必要的代码来复制您的问题。
-
当你尝试从你的列表中访问它时,投射你得到的值
-
另外,看起来您将这些类中的字段声明为
static。是这样吗? -
我已经给你发了电子邮件,@LuiggiMendoza
-
再说一次,请不要通过电子邮件向我发送您的代码。相反,在问题中提供必要的代码来复制问题。
标签: java class inheritance arraylist super