我有一个抽象类,我需要提供一个带0参数的构造函数。我只是不确定如何构建它或将进入它。
enum Engine {STEAM_ENGINE, STEAM_TURBINE, GAS_TURBINE, DIESEL, ELECTRIC, WIND, HUMAN_FORCE};
public abstract class Ship
{
protected String name;
protected int year;
protected Engine engineType;
public Ship(String n, int y, Engine t)
{
this.name = n;
this.year = y;
this.engineType = t;
}
public Ship ()
{
}
这是我到目前为止的代码。任何输入将不胜感激。特别是因为我并不真正理解抽象类中0参数构造函数的概念。
感谢您的帮助!
答案 0 :(得分:3)
这与deb_rider的答案类似。但我建议使用这种形式的代码:
public Ship() {
this("", 0, null);
}
它的作用是调用另一个参数化构造函数,通过使用this
运算符来使用默认值初始化Ship
。
为什么this()
代替this.x = x; this.y = y;...
?
简单:因为它更短并且使代码更具可读性: - )
从上面的链接:
“...在构造函数中,您还可以使用
this
关键字在同一个类中调用另一个构造函数。这样做称为显式构造函数调用 ......“
答案 1 :(得分:1)
默认构造函数或非参数化构造函数用于将属性初始化为某些默认值,同时在没有可用数据时创建该类的新对象。 您可以定义“0参数”构造函数以将值初始化为
public Ship(){
this.name="";
this.year=0;
...
}
您还可以定义一些set方法,以便有权在以后更改值。 e.g,
public void setName(String name){
this.name=name;
}
答案 2 :(得分:0)
首先,我们应该理解为什么我们使用抽象类的构造函数。这里有几点可以帮助您理解为什么我们在抽象类中使用构造函数。
我们使用默认构造函数(非参数或0参数)来避免开发人员在从子类链接构造函数时出错。例如
公共课MyShip扩展了Ship
{
公共MyShip()
{
超();
}
}
如果没有将默认构造函数放在Ship类中,我们会收到错误。但是我们主要使用默认构造函数来表示数据成员的默认值,如
public Ship()
{
this.name = "Default Engine name";
this.year = 2014;//what you want as a default.I assume current year
this.engineType = Engine.STEAM_ENGINE;//this is default engine type
}
我的意思是默认构造函数用于为类的数据成员分配默认值(根据您的要求进行更改,例如int的默认值为0,但您可能需要当前年份作为默认值)并且您不需要放置默认构造函数中的所有数据成员。您应该将该数据成员放在默认构造函数中,这些构造函数需要更改,就像您希望this.year = 0;然后你可以避免,这是由编译器完成的。
希望你得到帮助。
由于