继承类设计(Java)

时间:2012-09-12 03:17:49

标签: java inheritance class-design

对于一个小游戏我想设计两个应该绘制我的单位的类。我的课程UnitSettler扩展了Unit

要绘制它们,我有课程UnitViewSettlerView

现在UnitView有一个方法public void draw(Graphics g)SettlerView应该使用相同的方法。两个类别的差异应该在于他们获取信息以获取单位的方式。假设Units总是蓝色而Settlers颜色取决于他们的健康状况(这将是Settler中可以访问的SettlerView字段。

实施该方法的正确方法是什么?我想要一个没有setColor等公共方法的简洁设计。

编辑:这是我的第一个方法:

public class UnitView {
    private Unit unit;
    public Color color; // I don't want to make it public. Setting it private + getter/setter does not seem to be different to me.
    private color calculateColor() { ...uses the information of unit... }
    public void draw(Graphics g) { ...something using the Color... }

}

public class SettlerView extends UnitView {
    private Settler settler;

    private color calculateColor() { ...this method overides the one of UnitView.... }
}

我想使用Polymorphism来调用UnitView.draw。关键是公共领域的颜色。

2 个答案:

答案 0 :(得分:1)

了解多态性:

http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

UnitView和SettlerView应该使用draw()方法从基类派生。您可以将其设计为抽象,以便所有子类都必须实现它。

答案 1 :(得分:0)

您始终可以覆盖父绘制方法。

所以例如,如果父方法是

public void draw(Graphic g){
     g.setColor(blue);
}

子课程将

@Override
public void draw(Graphic g){        
    if  (this.health > 50){
        g.setColor(green);
    }else{
        g.setColor(red);
    }
    super.draw(g); // if you want to call the parent draw and just change color
}