#java #class #subclass #tostring
Вопрос:
Я пытаюсь написать код, который берет названия транспортных средств и тому подобное и сохраняет их в массиве объектов. У меня есть транспортное средство в качестве родительского класса со строкой TO, которая печатает название, марку и галлоны бака, два подкласса родительского-автобус и автомобиль. Автомобиль и автобус спрашивают,сколько дверей, колес или пассажиров. При печати массива после рандомизации порядка я получаю строки to только из родительского класса для печати, когда индекс массива относится к родительскому классу. Что я хочу распечатать, так это: Транспортное средство 0: название: марка автомобиля: что-то : размер бака: 15 Дверей: 4 : Колеса 4
Мой код приведен ниже:
import java.util.*;
public class Q1 {
public static void main(String args[]){
Scanner kb = new Scanner(System.in);
Vehicle[] list = new Vehicle[3];
for(int i =0;i < list.length;i ){
int random = (int)(Math.random()*3);
if(random == 0){
System.out.println("What is the Name, brand and how big is the gas tank of the vehicle?");
String name = kb.next();
String brand = kb.next();
int gasTank = kb.nextInt();
Vehicle a = new Vehicle(name,brand,gasTank);
list[i] = a;
}
else if(random == 1){
System.out.println("How many doors and wheels does the car have");
int doors = kb.nextInt();
int wheels = kb.nextInt();
System.out.println("What is the Name, brand and how big is the gas tank of the car?");
String name = kb.next();
String brand = kb.next();
int gasTank = kb.nextInt();
Car a = new Car(doors,wheels,name,brand,gasTank);
list[i] = a;
}
else{
System.out.println("How many doors and wheels does the bus have?");
int doors = kb.nextInt();
int wheels = kb.nextInt();
System.out.println("What is the Name, brand and how big is the gas tank of the bus?");
String name = kb.next();
String brand = kb.next();
int gasTank = kb.nextInt();
Bus a = new Bus(doors,wheels,name,brand,gasTank);
list[i] = a;
}
}
printArray2(list);
}
public static void printArray(Vehicle[] list){
for(int i = 0; i< list.length; i ){
System.out.println("Vehicle " i);
System.out.println(list[i]);
System.out.println("___________");
}
}
public static void printArray2(Vehicle[] list){
for(int i = 0; i< list.length;i ){
System.out.println("Vehicle " i);
System.out.println(list[i].toString());
System.out.println("___________");
}
}
}
class Vehicle {
String name;
String brand;
int gasTank;
public Vehicle(){
this(" ", " ", 15);
}
public Vehicle(String name, String brand,int gasTank){
this.name = name;
this.brand = brand;
this.gasTank = gasTank;
}
public String getname(){
return name;
}
public String getbrand(){
return brand;
}
public int getgasTank(){
return gasTank;
}
public void setname(String name){
this.name = name;
}
public void setbrand(String brand){
this.brand = brand;
}
public void setgasTank(int gasTank){
this.gasTank = gasTank;
}
public double milesPerGallon(double miles, double gallonsUsed){
return miles / gallonsUsed;
}
public String toString(){
return " name: " name " Brand: " brand " Gallons in Tank: " gasTank;
}
public double fillTank(double gallonsUsed){
return (gasTank - gallonsUsed);
}
}
class Car extends Vehicle{
int numOfdoors;
int numOfWheels;
public Car(){
this(2,4,"","",10);
}
public Car(int numOfDoors, int numOfWheels, String name, String brand, int gasTank){
this.numOfdoors = numOfDoors;
this.numOfWheels = numOfWheels;
super.name = name;
super.brand = brand;
super.gasTank = gasTank;
}
public int getnumOfdoors(){
return numOfdoors;
}
public int getnumOfWheels(){
return numOfWheels;
}
public void setnumOfdoors(int numOfdoors){
this.numOfdoors = numOfdoors;
}
public double milesPerGallon(double miles, double gallonsUsed){
return miles / gallonsUsed;
}
public String toString(){
return "The car has " numOfWheels " wheels and " numOfdoors " doors";
}
}
class Bus extends Vehicle {
int numOfWheels;
int numOfPassengers;
public Bus(){
this(1,8,"","", 50);
}
public Bus(int numOfWheels, int numOfPassengers, String name, String brand, int gasTank){
this.numOfWheels = numOfWheels;
this.numOfPassengers = numOfPassengers;
super.name = name;
super.brand = brand;
super.gasTank = gasTank;
}
public int getNumOfWheels(){
return numOfWheels;
}
public int getNumOfPassengers(){
return numOfPassengers;
}
public void setNumOfWheels(int numOfWheels){
this.numOfWheels = numOfWheels;
}
public void setNumOfPassengers(int numOfPassengers){
this.numOfPassengers = numOfPassengers;
}
public double milesPerGallon(double miles, double gallonsUsed){
return miles / gallonsUsed;
}
public String toString(){
return "The bus has " numOfWheels " Wheels and " numOfPassengers " Passengers";
}
}
Комментарии:
1. если вы хотите сохранить функциональность родительских строк, почему вы переопределили этот метод? просто удалите его в дочерних классах
Ответ №1:
В своем коде вы переопределяете toString
метод в дочерних классах. Хотя я понимаю, что вы хотите печатать значения из родительского класса также вместе с дочерним классом. Поэтому ваш toString
класс в дочернем классе должен быть похож на следующий, где вы также сначала звоните родителям toString
.
@Override
public String toString() {
return super.toString() "wheels " wheels " doors " numOfdoors ; // or something like this
}