Вы не можете вызывать метод super в других объектах - это нарушит инкапсуляцию. Все дело в том, что объект управляет тем, что делают его переопределенные методы. Например, вы можете переопределить метод add
коллекции, чтобы вызвать исключение при определенных обстоятельствах, чтобы он мог гарантировать, что в коллекцию были добавлены только «правильные» элементы. Это было бы бессмысленно, если бы вызывающие абоненты могли просто обойти это с броском!
Единственная причина, по которой объект получает вызов super.foo()
для себя - это возможность реализовать один вызов с помощью родительской реализации. Это зависит от кода в классе, чтобы убедиться, что он делает это только разумно. Опять же, чтобы взять пример надстройки в коллекции, если коллекция переопределяет add
, она должна иметь некоторый способ добавления проверенного элемента в коллекцию, который он будет делать с super.add()
.
Обратите внимание, что по той же причине инкапсуляции вы можете только вызывать родительскую реализацию, а не реализацию прародителя - так что super.foo()
допустимо, но super.super.foo()
нет.