构造函数给出2个错误
问题描述:
package vehicleapp;
public class Car extends Vehicle {
int seatCap;
public Car(String name, int modelNo, int seatCap) {
this.seatCap = seatCap;
super(name, modelNo);
}
}
这段代码有什么问题?请告诉我!构造函数给出2个错误
答
super(name, modelNo);
必须在构造函数体的第一条语句(只要您有它明确),因为超类构造函数必须先于子类构造函数体执行:
public Car(String name, int modelNo, int seatCap) {
super(name, modelNo);
this.seatCap = seatCap;
}
答
在任何构造函数调用,超级必须是正在使用的第一行。 docs.oracle.com/javase/tutorial/java/IandI/super.html
super(name, modelNo);
答
使用super()
为您的构造函数中的第一行的理由,在SO-答案在这里共享 - why-does-this-and-super-have-to-be-the-first-statement-in-a-constructor,你可以改变你现有的代码 -
public Car(String name, int modelNo, int seatCap) {
super(name, modelNo);
this.seatCap = seatCap;
}
答
在你Vehicleapp包
您的车辆类必须是这样的
public class Vehicle{
private String name,modelNo;
Vehicle(String name ,String modelNo)
{
this.name=name;
this.modelNo=modelNo;
}
}
答
Super();关键字应该在顶层,因为您在子类中创建构造函数,构造函数首先查找superClass构造函数,直到Object SuperClass。
Hirearchy:
孩子Contrctor->(查找父类的构造) - >父类 - >(如果它也继承任何超它应该有父类的父类的构造,即超();) - > .. 。 - > Object SuperClass。
通常我们有关键字super();在所有用户定义的构造函数中,但显而易见的是它没有写成。
如果问题解决了,请给出一个答案。 – nullpointer