1

即使子类实现了该方法,subclassResponsibility 发送方选择器也会卡住。

我认为这个论点可能会导致这种情况发生,但它是吗?

谁能告诉我们为什么?

在抽象类中,我们有这个

fromString: aString
    "init with a string"

    ^self subclassResponsibility

我正在运行这个:

unit := (Units new fromString: aString)

然后发生错误。

其中Units是抽象类。

Travis Griggs 目前的方法可以消除错误

实例创建方法是否有双重调度?

4

1 回答 1

6

对那里的细节有点害羞,但它看起来就像你告诉它的那样。

该表达式Units new返回一个新Units实例,然后您将其发送fromString:到该实例。您已实施以返回发送的结果subclassResponsibility

如果Units真的是一个抽象类,我不会期望你实例化它(你通常不会发送new到抽象类,除非你也弄乱了 的行为new)。

所以我本来希望你做这样的事情:

unit := (YourRealSubclass new fromString: aString)

YourRealSubclass有一个真正的实现fromString:

于 2013-06-20T20:07:12.280 回答