mar*_*ver 2 smalltalk squeak pharo
实例创建方法,如
ClassName new
Run Code Online (Sandbox Code Playgroud)
为了帮助一些细节,
我们可以在抽象类中编写一个算术方法,
然后在子类中双重发送它们.
我们可以在实例创建中使用它吗?
我尝试了新的但它失败了.导致一些预定义的基本新方法.
Double Dispatch在这种new情况下真的没有意义.双重调度背后的想法是,您无法通过仅调度接收器来确定正确的行为.(单个)参数的类型对选择(调度)的行为具有相同的效果.换句话说,双重调度只有在你的方法有参数的情况下才有意义,new而不是.
也就是说,您当然可以实现自己的new方法来覆盖库存默认继承的方法.你可以让它做各种有趣的事情.进行某种环境检查以确定适合的子类是很常见的.
AbstractClass>>>new
^self platform = #unix
ifTrue: [SubclassThatLeveragesUnix basicNew]
ifFalse: [CrappyPCSubclass basicNew]
Run Code Online (Sandbox Code Playgroud)
请注意,我们basicNew在这里使用,而不是new.如果您使用过new,则需要在这些子类中实现不同的覆盖,否则它将AbstractClass>>>new再次继承并重新发送消息.