부모 클래스가 MotorVehicle
이고 다른 하위 클래스가 Car
, Bus
및 Truck
인 Java 프로그램을 만들려고합니다. 이제 MotorVehicle
에는 6 명의 데이터 멤버가 있고 다른 클래스에는 각각 다른 데이터 멤버가 두 개 있습니다. 내 주요 방법은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
합니다. 실행하는 동안, 나는 arraylist에 새로운 인스턴스 또는 항목이 기존 항목에 대한 MotorVehicle 매개 변수를 덮어 쓰는 것을 보았습니다. 예를 들면 : 목록에 존재하는 Car
인스턴스가있는 경우. 그리고 Bus
인스턴스를 추가하면 MotorVehicle
클래스에 속하는 Bus
인스턴스의 6 개 데이터 멤버가 MotorVehicle
클래스에 속하는 기존 Car
인스턴스의 6 개 데이터 멤버를 덮어 씁니다.
는 나는이 일을 고정받을 줄 알았는데 (하지만 슬프게도, 그것은하지 않았다) :
MotorVehicle에 각각의 클래스에 또한을 유형을 변경하는 것입니다
MotorVehicle newCar = new Car (all, the, parameters, common, and, class, specific);
, I 다음과 같이 정의되는 생성자가 있어야합니다. 예를 들면 자동차 :
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'으로 선언 한 것처럼 보입니다. 그래? –