这是一个愚蠢的问题,但是自从我使用java以来已经有很长一段时间......我如何使用布尔值编写构造函数,或者我应该编写一个默认构造函数?我最近一直在使用C ++,而且我忘记了很多java语法。
这是我到目前为止所做的:
public class Creature {
protected int terrain;
public static final int DESERT = 0;
public static final int MOUNTAIN = 1;
public static final int FOREST = 2;
//symbols on cards
boolean flyingCreature = false;
boolean magicCreature = false;
boolean canCharge = false;
boolean rangedCombat false;
public int specialAbility = 0;
public Creature(int startTerrain, boolean flying, boolean magic, boolean charge, boolean ranged, int special){
?
}
}
我在搜索时似乎无法找到任何内容...如何在构造函数中初始化每个值?或者我应该
public Creature(){
startTerrain = DESERT;
flyingCreature = false;
magicCreature = false;
canCharge = false;
specialAbility = 0;
} ?
我还有几个继承自这个的类,所以我不确定这是否有所不同。
答案 0 :(得分:3)
如果你使用带参数的构造函数,它就像这样
this.flyingCreature = flying;
this.magicCreature = magic;
等等。
如果你使用没有任何参数的构造函数(默认构造函数),那么你需要将类字段设置为某些常量(就像你做的那样)。所以你这样做。
this.flyingCreature = false;
this.magicCreature = false;
等等。
this.
的使用不是强制性的,除非您有一个具有相同名称的参数,在这种情况下您应该使用this.
,否则您的初始化代码将对类字段没有影响。
答案 1 :(得分:1)
布尔参数与任何其他类型一样。
所以,就像这样。
public Creature(int startTerrain, boolean flying, boolean magic, boolean charge, boolean ranged, int special){
terrain = startTerrain;
flyingCreature = flying;
magicCreature = magic;
canCharge = charge;
rangedCombat = ranged;
specialAbility = special;
}
如果这些参数在开始时总是相同的,那么你可以在默认构造函数上设置它们,如你所说。
因为你有继承这个的类,所以它们的构造函数必须调用super()
,它调用父类构造函数。如果你在没有任何参数的情况下调用它,将调用Creature的基础构造函数。
答案 2 :(得分:1)
你可能在你的例子中适当地选择了原始类型boolean但是因为你提到了带有大写“B”的“Boolean”,所以存在差异。布尔变量可以为空,而不像具有小写“b”的基元“boolean”。如果您使用过布尔值,您可以简单地初始化那些
Boolean boolVar = Boolean.TRUE; //or Boolean.FALSE
以后他们可能会根据情况要求进行空检查。