Я пытаюсь создать программу Java, где у меня есть родительский класс MotorVehicle
и много различных суб-классы, а именно Car
, Bus
и Truck
. Теперь MotorVehicle
имеет 6 членов данных, и каждый из других классов имеет по два разных члена данных.Наследование и ArrayList в Java
В моем основном методе, я создал ArrayList<MotorVehicle> myArrayList
и я создаю объекты Car
, Bus
и Truck
и добавить их к этому ArrayList. Так, например, для car
я:
Car newCar = new Car (all, the, parameters, common, and, class, specific);
myArrayList.add(newCar);
Аналогично для Bus
, и Truck
. Во время выполнения я увидел, что новые экземпляры или записи в arraylist переписывали параметры MotorVehicle для существующих элементов. Итак, например: Если у меня есть exisitng экземпляр в списке. И затем я добавляю экземпляр Bus
, 6 членов данных экземпляра Bus
, относящихся к классу MotorVehicle
, перезаписывают 6 членов данных существующего экземпляра Car
, относящегося к классу MotorVehicle
.
Я думал, что это может исправляются, делая это (но, к сожалению, это не так):
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'. Это так? –