你得到的行为是预期的。关键在于super 的语义。在分析您的案例之前,让我们看一些示例:
示例 1
ClassA "implements msg"
ClassB "implements msg"
ClassC "implements msg"
这意味着msg 的继承版本在ClassB 和ClassC 中被覆盖。在这种情况下
super msg "sent from ClassC invokes ClassB >> msg"
super msg "sent from ClassB invokes ClassA >> msg"
super msg "sent from ClassA will signal MessageNotUnderstood"
(我假设msg 没有在ClassA 之上实现)
示例 2
ClassA "implements msg"
ClassB "does not implement msg"
ClassC "implements msg"
然后
super msg "sent from ClassC invokes ClassA >> msg"
super msg "sent from ClassB invokes ClassA >> msg"
示例 3
ClassA "implements msg"
ClassB "does not implement msg"
ClassC "does not implement msg"
这里
super msg "sent from ClassC invokes ClassA >> msg"
super msg "sent from ClassB invokes ClassA >> msg"
所以,super 的语义是:在我的超类中开始查找。
您的情况
你有
Object "implements class"
Sup "does not implement class"
Sub "does not implement class"
因此,当您从Sub 发送super class 时,它会调用Object >> class,对吗?这与发送self class 相同(因为class 未在Sub 中实现),即Sub。由于Sub new print_superclass 从Sub 发送super class,你得到Sub。