我试图学习一些Java,但我却陷入了创建子类的困境。我一直收到There is no default constructor available in...
错误。
这是代码:
class Car
{
String name;
int speed;
int gear;
int drivetrain;
String direction;
String color;
String fuel;
public Car(String carName, int carSpeed, String carDirection, String carColor, int carDriveTrain, int carGear)
{
name = carName;
speed = carSpeed;
gear = carGear;
drivetrain = carDriveTrain;
direction = carDirection;
color = carColor;
fuel = "Gas";
}
void shiftGears(int newGear){gear = newGear; }
void accelerateSpeed(int acceleration){speed = speed + acceleration; }
void applyBrake(int brakingFactor){ speed = speed - brakingFactor;}
void turnWheel(String newDirection){ direction = newDirection; }
}//end of Car class
class Suv extends Car
{
void applyBrake(int brakingFactor)
{
super.applyBrake(brakingFactor);
speed = speed - brakingFactor;
}
}
当我尝试创建" Suv"子类。我究竟做错了什么?谢谢!
答案 0 :(得分:2)
自" Car"有一个构造函数,从Car派生的任何子类也需要一个构造函数。所以首先你需要在Suv类中放置一个构造函数。
示例:
class Suv extends Car {
public Suv() {
super( /* here you need to pass arguments to create a car */);
// any other constructor code
}
}
答案 1 :(得分:2)
您可能希望在Suv
中创建以下构造函数,以初始化Car
构造函数具有的参数:
public Suv(String carName, int carSpeed, String carDirection, String carColor, int carDriveTrain, int carGear)
{
super (carName, carSpeed, carDirection, carColor, carDriveTrain,carGear);
}
另一种方法是将无参数构造函数添加到Car
,在这种情况下,Sub
的默认构造函数将调用该构造函数:
public Car()
{
}
答案 2 :(得分:1)
将以下构造函数添加到Car
:
public Car(){}
问题是无法创建Suv
,因为为了运行Suv
的默认构造函数,需要首先运行Car
的构造函数,Car
具有Suv
只有一个接受参数的构造函数,因此它不能用作默认构造函数。
正如@Markus建议的那样,另一种方法是在super
中实现一个构造函数,该构造函数将使用所有必需参数调用Suv
。无论哪种方式,主要的想法是,为了实例化Car
我们需要首先实例化{{1}}否则我们将得到编译器错误。
答案 3 :(得分:0)
我建议不要将SUV类放在同一个文件中。相反,在当前包中创建另一个类,将其命名为SUV,扩展它并通过以下两种语法之一调用超类构造函数:
super(); //calls the superclass no-argument constructor with no parameter list
或
super(parameter list); //calls the superclass constructor with a matching parameter list