如何打印类变量-java



我打算制作一个基类(车辆(,其中包含两个派生类(汽车+摩托车(,它们都包含关于每辆车的特定信息。

我正在尝试实例化这些类,但不确定这涉及到什么。我假设我应该使用toString方法。

之后,我想将每辆车的每一个细节打印到控制台上。

这是我的基类:

package assignment2;
public class Vehicle {
  int seatNumber;
  int numberMade;
  int yearMade;
  public Vehicle() {}
  public Vehicle(int seatNumber, int numberMade, int yearMade) {
    this.seatNumber = seatNumber;
    this.numberMade = numberMade;
    this.yearMade = yearMade;
  }
  public int getSeatNumber() {
    return seatNumber;
  }
  public int getNumberMade() {
    return numberMade;
  }
  public int getYearMade() {
    return yearMade;
  }
}

这是我的一个派生类(汽车(:

package assignment2;
public class Car extends Vehicle {
    public int topSpeed;
    public Car (int startSpeed, //top speed
            int startNumber,    //number of seats
            int startMade,      //number made
            int startYearMade) { //year made
        super(startNumber,startMade, startYearMade);
        topSpeed = startSpeed;
    }
  public Car(int seatNumber, int numberMade, int yearMade) {
    this.seatNumber = 4;
    this.numberMade = 1500000;
    this.yearMade= 1990;
    this.topSpeed = 180;
  }
}

这是另一个衍生类别,摩托车:

package assignment2;
public class Motorbike extends Vehicle{
    public int topSpeed;
    public Motorbike (int startSpeed, //top speed
            int startNumber,    //number of seats
            int startMade,      //number made
            int startYearMade) { //year made
        super(startNumber,startMade, startYearMade);
        topSpeed = startSpeed;
    }
  public Motorbike(int seatNumber, int numberMade, int yearMade) {
    this.seatNumber = 1;
    this.numberMade = 5000;
    this.yearMade= 2015;
    this.topSpeed = 300;
    }
}

这是我的主要课程:

package assignment2;
public class Assignment2 {

  public static void main(String[] args) {
    int Car;
    Car = new Vehicle().seatNumber;
    Car = new Vehicle().numberMade;
    Car = new Vehicle().yearMade;
    System.out.println(Car);
  }
}

如果您对我的代码有任何帮助,我们将不胜感激。谢谢

编辑

我是否在每个类中使用ToString方法重写?即

package assignment2;
public class Car extends Vehicle {
    public int topSpeed;
    
    public Car (int startSpeed, //top speed
            int startNumber,    //number of seats
            int startMade,      //number made
            int startYearMade) { //year made
        super(startNumber,startMade, startYearMade);
        topSpeed = startSpeed;
    }
    
  public Car(int seatNumber, int numberMade, int yearMade) {
    this.seatNumber = seatNumber; //takes the value you pass as parameter
    this.numberMade = numberMade; // and stores it into the instance variable
    this.yearMade= yearMade;
    this.topSpeed = 100;
  }
  
  @Override
  public String toString(){
        return Car.class.toString();
      
  }
}

public Car(int seatNumber, int numberMade, int yearMade) {
    this.seatNumber = 4;
    this.numberMade = 1500000;
    this.yearMade= 1990;
    this.topSpeed = 180;
  }

仅此块就表明您不理解构造函数的概念。

该代码应该是:

public Car(int seatNumber, int numberMade, int yearMade) {
    this.seatNumber = seatNumber; // takes the value you pass as parameter
    this.numberMade = numberMade; // and stores it into the instance variable
    this.yearMade= yearMade;
    this.topSpeed = 180;          // don't do this, unless you assume to live in a world
// in which every single car has 180 as top speed. pass another parameter for this, or provide setter methods
  }

现在,这就是它变得奇怪的地方。

int Car;
    Car = new Vehicle().seatNumber;
    Car = new Vehicle().numberMade;
    Car = new Vehicle().yearMade;
    System.out.println(Car);

嗯。。。你在干什么?你应该实例化一辆汽车,然后打印出来。另一方面,您所做的是实例化一个称为Car的int,并将值设置为yearMade(以前的值被覆盖(

所以:实例化一辆汽车:

Car myCar = new Car(5, 5000, 2000);

其中5是座位数量,5000是汽车制造数量,2000是制造年份。

现在,您可以简单地调用:System.out.println(myCar);这将调用print由toString方法返回的String。

EDIT:避免编辑声明必须覆盖toString方法:

是和否。如果你想打印出好看的"Car specifications:number of seats…"等等,您需要重写toString方法并构建您想要返回的String。

但是,如果不重写toString,它仍然可以工作。它将使用从Object类继承的toString的实现,这通常不是您需要或想要的。

CarMotorbike是Vehicle的子类,所以无论您在那里定义了什么属性,都将在子类中继承。

重写CarMotorbike类中的toSting()方法,因此当您打印此类的对象时,它将显示toString()方法中的内容。

@Override
String toString(){
}

你只需要通过汽车实例,

System.out.println(Car);

如果您使用构造函数,为什么要在那里进行硬编码,则构造函数用于在创建对象时初始化对象的值。

因此,删除

公共摩托车(int seatNumber,int numberMade,int yearMade({this.seatNumber=1;this.numberMade=5000;this.yearMade=2015;this.top速度=300;}

并在构造函数topSpeed 中再添加一个参数

public Motorbike(int seatNumber, int numberMade, int yearMade, int topSpeed){
    this.seatNumber = seatNumber;
    this.numberMade = numberMade;
    this.yearMade= yearMade;
    this.topSpeed = topSpeed;
}

并在创建摩托车类的对象时进行初始化

Motorbike mb = new Motorbike(10,20,2015,80);

最新更新