我正在尝试为超类中的继承字段建立默认值。
因此,我的类层次结构是:
Character
- > Enemy
- > Boss
\
- > Hero
每个Character
都有public static char avatar
代表他参加ASCII比赛场地。
如何为从avatar
继承的每个类的Character
设置默认值?
谢谢!
答案 0 :(得分:4)
您可以在构造函数中设置它。例如:
public class Hero extends Character {
public Hero() {
avatar = 'H';
}
}
但是,为了实现这一点,avatar属性不能是静态的(其他所有的头像都是相同的,就像在最后一个实例化类的构造函数中设置的那样)。你的Character类应该看起来像这样(前提是你想要在构造函数中没有设置它们的类的默认化身):
public class Character {
public char avatar;
public Character() {
avatar = 'A';
}
}
答案 1 :(得分:2)
头像不能是静态字段,因为如果您在任何子类中更改它,它将针对所有子类进行更改。你可以像这样实现它。
public class Character{
public char avatar = '';
public Character(char avatar){
this.avatar = avatar;
}
}
public class Enemy extends Character{
public Enemy(char avatar){
super(avatar);
}
}
public class Boss extends Enemy{
public Boss(char avatar){
super(avatar);
}
}
public class Hero extends Character{
public Hero(char avatar){
super(avatar);
}
}
使用此方法,您将为要为其创建对象的每个类具有头像。在上面的示例中,如果将avatar声明为static,则对于每个对象ecreation,它将更改所有类的字段值。
答案 2 :(得分:1)
static
private char avatar = 'A'
getAvatar()
和setAvatar(char c)
方法答案 3 :(得分:0)
一个好主意是提供要实现的基类中的方法,例如“createWeapon()
”,然后使用这些方法在构造函数中设置最终字段。除非被覆盖,否则这些方法将返回默认对象。
编辑:不要将这些字段设为静态。毫无意义。如果您只想维护单个默认实例,则可以将这些对象的静态版本作为默认值返回。但是,例如,使用char,您的示例似乎更简单。在这种情况下,没有太大的好处。只需归还角色。