我正在学习 Smalltalk 的基础知识。有一个super
关键字用于从子类方法中的超类调用方法:
Object subclass: # A
test
^1
A subclass: # B
test
^2
callSuper
^super test
所以B new callSuper
评估为1
。
好的。这很清楚。
所以现在,我为类定义了一堆类方法B
:
createNew1
^super new
createNew2
^self new
create
^self
createSuper
^super
它们分别评估为a B
、a B
和B
一个错误(这向我表明这super
不是对子类的强制转换,而是一种消息调度程序)。
B
尽管有super
关键字,为什么我会得到类的实例?a B
和对象有什么区别B
?我开始认为该B
对象是 class 的一个特殊的单例实例(就像static
在其他语言中实现的属性一样)B
,但是 - 我已经检查过了,它的 class 是 aB
并且 subclass 是 an A
。
super
类方法中关键字的语义是什么?它与对象方法内部的语义有何不同?self
调用内部类方法可以获得的对象到底是什么?