【发布时间】:2010-10-23 15:36:02
【问题描述】:
假设我有一个名为“shape”的抽象父类,并且有多个子类(三角形、正方形、圆形...)。我想在父“shape”类中定义一个所有子类都必须实现的抽象方法,我们称之为“draw”。所以所有形状子类都必须提供“draw()”方法。但是,draw 方法采用“Stencil”类型的参数,而且,并非每个形状子类都可以使用任何模板...
所以有一个抽象的“形状”类、多个形状子类和多个模板。我需要一个在 shape 类中定义的 draw 方法。正方形可能使用 Stencil1,圆形可能使用 Stencil2。
我猜泛型可以解决问题,但我不确定。每个形状子类都需要使用特定的模板定义绘图方法,因为这些类也被其他类使用,编译器应该强制所有程序员使用该类支持的模板调用绘图方法。我们不能定义像“public abstract void draw(Stencil s)”这样的抽象方法,因为程序员可以将任何模板传递给 square 类,而 square 类只支持“Stencil1”
有什么想法吗?
更新1: 应该补充一点,形状类并不关心子类使用哪个模板,但由于子类也用于其他类,所以定义绘制方法很重要,以便编译器只接受支持的模板。
【问题讨论】:
-
除了 shape 类确实关心,因为正如您所说,“编译器应该强制所有程序员使用该类支持的模板调用 draw 方法”
-
不,形状类不关心;重要的是各种 Shape 类的其他用途。
标签: java abstract-class overriding