对于一个小游戏我想设计两个应该绘制我的单位的类。我的课程Unit
和Settler
扩展了Unit
。
要绘制它们,我有课程UnitView
和SettlerView
。
现在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。关键是公共领域的颜色。
答案 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
}