没有抽象类的arg构造函数

时间:2014-03-30 05:52:57

标签: java parameters constructor abstract-class

我有一个抽象类,我需要提供一个带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参数构造函数的概念。

感谢您的帮助!

3 个答案:

答案 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)

首先,我们应该理解为什么我们使用抽象类的构造函数。这里有几点可以帮助您理解为什么我们在抽象类中使用构造函数。

  1. 初始化类的数据成员,或者分配一些值,或者像@ ambigram_maker的答案那样构造链接。构造函数链接意味着从构造函数中调用另一个构造函数。
  2. 我们使用默认构造函数(非参数或0参数)来避免开发人员在从子类链接构造函数时出错。例如

    公共课MyShip扩展了Ship    {
        公共MyShip()       {         超();      }  }

  3. 如果没有将默认构造函数放在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;然后你可以避免,这是由编译器完成的。

    希望你得到帮助。

    由于