Позвольте мне привести еще один ответ, который может быть полезен в тех случаях, когда вопрос относится к поведению (методы), а не формы (переменные экземпляра.)
Предположим, у вас есть два класса C и D и экземпляр С C. Теперь предположим, что C наследует от C ', и вы хотите вызвать метод m, определенный в C', который был переопределен в C. Выражение cm активирует реализацию на C, а не ту, что в C ', потому что c class == C, а не C '. Как вы сказали, нет «удаленной» версии супер, которую вы могли бы использовать от D.
Если вы хотите активировать метод в C ', тогда вы должны перенести исходный код m в C' на другой метод, скажем m0, и переопределить m в C ', чтобы он просто делегировал m0 (^ self m0). Сохраняйте метод m в C неизменным и затем вызывайте из D, используя m0 (c m0) вместо m (c m).
Обратите внимание, что иначе не будет работать: если вы определяете m0 в C 'как^self m, выражение c m0 активирует версию m, найденную в C, а не C'.
Вы также можете определить m0 в C как^супер m, и таким образом c m0 активирует C '>> m. Однако использование супер с другим селектором не считается хорошей практикой, и вы должны не делать этого.