是否可以为子类中的继承字段建立默认值?

时间:2010-05-22 23:56:26

标签: java oop static

我正在尝试为超类中的继承字段建立默认值。

因此,我的类层次结构是:

Character - > Enemy - > Boss
\
- > Hero

每个Character都有public static char avatar代表他参加ASCII比赛场地。

如何为从avatar继承的每个类的Character设置默认值?

谢谢!

4 个答案:

答案 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)方法
  • 子类构造函数中的
  • 调用具有所需值的setter

答案 3 :(得分:0)

一个好主意是提供要实现的基类中的方法,例如“createWeapon()”,然后使用这些方法在构造函数中设置最终字段。除非被覆盖,否则这些方法将返回默认对象。

编辑:不要将这些字段设为静态。毫无意义。如果您只想维护单个默认实例,则可以将这些对象的静态版本作为默认值返回。但是,例如,使用char,您的示例似乎更简单。在这种情况下,没有太大的好处。只需归还角色。