0

对于一个小游戏,我想设计两个应该绘制我的单位的类。我有课程Unit并且Settler扩展了Unit.

为了绘制它们,我有类UnitViewSettlerView.

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

什么是实现它的正确方法?我想要一个干净的设计,没有像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.... }
}

我想用多态来调用UnitView.draw。关键是公共字段颜色。

4

2 回答 2

1

了解多态性:

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

UnitView 和 SettlerView 应该派生自具有 draw() 方法的基类。您可以将其抽象化,以便所有子类都必须实现它。

于 2012-09-12T03:27:57.297 回答
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
}
于 2012-09-12T03:27:20.970 回答