好的,我有这个类保险及其构造函数。
public class Insurance
{
protected String pNum, pDate;
protected int yPrem;
public Insurance(String pNum, String pDate, int yPrem)
{
this.pNum = pNum;
this.pDate = pDate;
this.yPrem = yPrem;
}
}
如何制作Auto extends Insurance课程?我是否需要将超类的所有参数传递给子类?
public class Auto extends Insurance
{
private String vehicleID, make, model;
private int year, accidents, age;
public Auto(String pNum, String pDate, int yPrem, String vehicleID,
String make, String model, int year, int accidents)
{
super(pNum, pDate, yPrem);
this.vehicleID = vehicleID;
this.make = make;
this.model = model;
this.year = year;
this.accidents = accidents;
age = 2014-year;
}
}
Auto的参数列表真的需要包含超类中的所有参数吗? 为了澄清,还有一个Property类扩展了Insurance类。
答案 0 :(得分:1)
因为public
的唯一Insurance
构造函数包含3个参数,Auto
构造函数必须调用它,传递3个参数。
但这些论点在技术上不一定来自Auto
构造函数本身。虽然让它们来自Auto
构造函数的参数是有意义的,但是可以从技术上传递文字,但这在这里没有多大的逻辑意义,因为这会限制传递给Insurance
的内容。
public Auto(String vehicleID,
String make, String model, int year, int accidents)
{
super("someNumber", "20140710", 500);
this.vehicleID = vehicleID;
this.make = make;
this.model = model;
this.year = year;
this.accidents = accidents;
age = 2014-year;
}
如果Auto
是Insurance
的子类,那么你已经拥有它的方式是最好的方法,即使技术上不需要Java那样。
但是Auto
和Insurance
?有一个设计问题。也许Car
需要拥有 Insurance
。 (或Person
Auto
而 Insurance
}。
答案 1 :(得分:0)
没有。在Insurance中添加默认构造函数,不带任何参数。 公共保险(){ }
调用此构造函数将使用Insurance默认为null的参数初始化对象。
答案 2 :(得分:0)
不,没有必要。这取决于你班级的设计。您还可以使用构造函数链来重载超类中的构造函数。
public class Insurance
{
protected String pNum, pDate;
protected int yPrem;
public Insurance()
{
this("10", "10-10-10", 10)
}
public Insurance(String pNum, String pDate, int yPrem)
{
this.pNum = pNum;
this.pDate = pDate;
this.yPrem = yPrem;
}
}
在这种情况下,您的子类应定义如下:
public class Auto extends Insurance
{
private String vehicleID, make, model;
private int year, accidents, age;
public Auto(String vehicleID, String make, String model, int year, int accidents)
{
super(); //If a constructor does not explicitly invoke a superclass constructor, the
//compiler automatically inserts a call to the no-argument constructor of the
// superclass
this.vehicleID = vehicleID;
this.make = make;
this.model = model;
this.year = year;
this.accidents = accidents;
age = 2014-year;
}
}