gpt4 book ai didi

inheritance - 类方法中的“super”关键字

转载 作者:行者123 更新时间:2023-12-04 02:44:27 25 4
gpt4 key购买 nike

我正在学习Smalltalk的基础知识。有一个super关键字,用于在子类方法中从父类(super class)调用方法:

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 Ba BB和一个错误(这表明 super不是强制转换为子类,而是某种消息分发程序)。

为什么尽管有 B关键字,却仍获得 super类的实例? a BB对象之间有什么区别?我开始认为 B对象是 static类的特殊单调实例(就像 B属性是用其他语言实现的一样),但是-我已经检查过了,它的类是 B,子类是 A

类方法中super关键字的语义是什么? 它与对象方法内部的语义有何不同?通过在类方法中调用 self可以真正获得什么对象?

最佳答案

selfsuper始终引用同一对象,即当前接收者。唯一的区别是self在接收方的类中开始以下方法的查找,而super在定义该方法的父类(super class)中开始。

有关详细信息,请参见Pharo by Example的第5章。

关于inheritance - 类方法中的“super”关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com