Smalltalk Squeak中隐藏机制的示例,类似于C++; 我想知道是否有可能实现类似于C++和C语言中的一个,这是它的主要特征之一。我知道我可以在Squeak中重写方法,并且我不能重载方法,因为它是一种动态语言,但是有可能隐藏方法/字段吗?我试图从吱吱作响的日志中找出答案,但找不到答案。如果有可能实现隐藏在吱吱声中,我很高兴看到一个例子。如果可能的话,原因是什么?可能是某个OOP值禁止了它?

Smalltalk Squeak中隐藏机制的示例,类似于C++; 我想知道是否有可能实现类似于C++和C语言中的一个,这是它的主要特征之一。我知道我可以在Squeak中重写方法,并且我不能重载方法,因为它是一种动态语言,但是有可能隐藏方法/字段吗?我试图从吱吱作响的日志中找出答案,但找不到答案。如果有可能实现隐藏在吱吱声中,我很高兴看到一个例子。如果可能的话,原因是什么?可能是某个OOP值禁止了它?,smalltalk,squeak,Smalltalk,Squeak,虽然没有明确的语法禁止对super的调用,但如果您不从方法重写调用super,那么继承的实现实际上是隐藏的。而且,不,您不能阻止子类访问超类实例变量 请先阅读@JamesFoster的答案 添加对禁止super的支持应该相对容易。由于super并不总是有效的,或者至少当超类为nil(例如,ProtoObject)时,编译器应该在允许super作为有效伪变量之前,在某个地方检查此条件。然后,通过询问类是否支持super(而不是其超类是否为nil)来调整该检查 我在Pharo中尝试过,但根本没有检查

虽然没有明确的语法禁止对super的调用,但如果您不从方法重写调用super,那么继承的实现实际上是隐藏的。而且,不,您不能阻止子类访问超类实例变量

请先阅读@JamesFoster的答案

添加对禁止
super
的支持应该相对容易。由于
super
并不总是有效的,或者至少当超类为
nil
(例如,
ProtoObject
)时,编译器应该在允许
super
作为有效伪变量之前,在某个地方检查此条件。然后,通过询问类是否支持
super
(而不是其超类是否为
nil
)来调整该检查


我在Pharo中尝试过,但根本没有检查(这意味着您可以发送到
ProtoObject
中的
super
)。因此,修改Pharo编译器可能会有点困难。

虽然没有明确的语法禁止调用super,但如果不从方法重写调用super,那么继承的实现实际上是隐藏的。而且,不,您不能阻止子类访问超类实例变量。@JamesFoster您的评论实际上是一个答案。请宣传一下。