【发布时间】:2009-03-25 13:15:18
【问题描述】:
我正在编写一些针对两个版本非常相似的硬件的软件,在我使用 API 初始化硬件之前,我无法知道我会返回哪种类型的硬件。
因为硬件非常相似,我计划有一个父类(TParent),它有一些抽象方法(用于硬件不同的地方),然后是两个子类(TChildA,TChildB),它们以硬件相关的方式实现这些方法.
所以我会先实例化一个 TParent 的对象,检查它是什么类型,然后将其转换为正确的子对象。
但是,当我这样做并调用在子类中完全实现的抽象方法之一时,我得到一个 EAbstractError。
例如:
myHardware:=TParent.Create();
if myHardware.TypeA then
myHardware:=TChildA(myHardware)
else
myHardware:=TChildB(myHardware);
myHardware.SomeMehtod();
我假设我不能将父类转换为子类,并且可能有更好的方法来做到这一点。有什么指点吗?
【问题讨论】:
-
为什么要强制转换为子类?多态性的重点是避免这种情况。
-
@OregonGhost:恕我直言,一个非常无益的评论。很好,提问者知道这是错误的,但不知道足够的 OO 来知道为什么它是错误的。他们在寻求你的帮助,而不是嘲笑。曾经有一段时间你也不知道 OO
-
我不认为 OregonGhost 的评论具有讽刺意味。恕我直言,他问了一个重要问题。
-
向 OregonGhost 道歉所以,现在我再次阅读它,我发现确实反应过度,当我写该评论时我一定有一个错误:)
-
RobS:今天很累,所以乱说,很高兴我能帮上忙,也感谢 mghie。
标签: delphi oop freepascal