java - 继承类设计(Java)

标签 java inheritance class-design

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

为了绘制它们,我有类 UnitViewSettlerView

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

实现这一点的正确方法是什么?我想要一个干净的设计,没有像 setColor 这样的公共(public)方法。

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

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。关键是公共(public)字段Color。

最佳答案

了解多态性:

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

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

关于java - 继承类设计(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380743/

相关文章:

java - Android Studio 缓存失效

java - 将包含数组的json字符串转换为Java中的Map

c++ - 为什么派生类重写了基类的方法,还要调用基类的方法?

c++ - 关于来自 VC12 和 VC14 的 c++ 友元和继承的不同行为

c# - 为什么我的继承类没有隐藏我的基类方法?

c# - 防止在设计时调整高度

Java - 一个文件中的代码和另一文件中的设计(无法识别的 actionPerformed 事件)

java - Watson视觉识别,在java中针对多个分类器进行分类

java - 如何使用父类从子类获取参数?

c++ - 在 Shutdown() 方法而不是析构函数中清理