我打算制作一个基类(车辆(,其中包含两个派生类(汽车+摩托车(,它们都包含关于每辆车的特定信息。
我正在尝试实例化这些类,但不确定这涉及到什么。我假设我应该使用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的实现,这通常不是您需要或想要的。
Car
和Motorbike
是Vehicle的子类,所以无论您在那里定义了什么属性,都将在子类中继承。
重写Car
和Motorbike
类中的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);