我想创建一个java程序,我有一个父类MotorVehicle
和许多不同的子类,即Car
,Bus
和Truck
。现在,MotorVehicle
有6个数据成员,每个其他类每个都有2个不同的数据成员。java中的继承和arraylist
在我的主要方法,我创建了一个ArrayList<MotorVehicle> myArrayList
和我创建的Car
,Bus
和Truck
对象并将其添加到此ArrayList。因此,例如,为car
我做的:
Car newCar = new Car (all, the, parameters, common, and, class, specific);
myArrayList.add(newCar);
同样,对于Bus
,和Truck
。在执行过程中,我看到新的实例或数组条目正在覆盖现有项目的MotorVehicle参数。 例如:如果我在列表中有一个存在Car
实例。然后我添加一个Bus
实例,属于MotorVehicle
类的Bus
实例的6个数据成员重写与MotorVehicle
类有关的现有Car
实例的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);
}
提供必要的代码来复制您的问题。 –
当您尝试从列表中访问它时,会获得您所得到的值 – jhamon
另外,看起来您将这些类中的字段声明为“static”。是这样吗? –