Spec-Zone .ru
спецификации, руководства, описания, API
|
Если Ваш метод переопределяет один из методов своего суперкласса, можно вызвать переопределенный метод с помощью ключевого слова super
. Можно также использовать super
обратиться к скрытому полю (хотя сокрытию полей обескураживают). Рассмотрите этот class, Superclass
:
public class Superclass { public void printMethod() { System.out.println("Printed in Superclass."); } }
Вот подкласс, вызванный Subclass
, это переопределяет printMethod()
:
public class Subclass extends Superclass { // overrides printMethod in Superclass public void printMethod() { super.printMethod(); System.out.println("Printed in Subclass"); } public static void main(String[] args) { Subclass s = new Subclass(); s.printMethod(); } }
В пределах Subclass
, простое имя printMethod()
обращается к тому, объявленному в Subclass
, который переопределяет тот в Superclass
. Так, чтобы обратиться к printMethod()
наследованный от Superclass
, Subclass
должен использовать полностью определенное имя, используя super
как показано. Компиляция и выполнение Subclass
печатает следующее:
Printed in Superclass. Printed in Subclass
Следующий пример иллюстрирует, как использовать super
ключевое слово, чтобы вызвать конструктора суперкласса. Вспомните из Bicycle
пример это MountainBike
подкласс Bicycle
. Вот MountainBike
конструктор (подкласса), который вызывает конструктора суперкласса и затем добавляет собственный код инициализации:
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super(startCadence, startSpeed, startGear); seatHeight = startHeight; }
Вызов конструктора суперкласса должен быть первой строкой в конструкторе подкласса.
Синтаксис для того, чтобы вызвать конструктора суперкласса
super();
super(parameter list);
С super()
, суперкласс конструктор без параметров вызывают. С super(parameter list)
, конструктора суперкласса с соответствующим списком параметров вызывают.
Object
действительно имеет такого конструктора, так если Object
единственный суперкласс, нет никакой проблемы. Если конструктор подкласса вызывает конструктора его суперкласса, или явно или неявно, Вы могли бы думать, что будет целая цепочка вызванных конструкторов, полностью назад конструктору Object
. Фактически, дело обстоит так. Это вызывают конструктором, объединяющим в цепочку, и Вы должны знать об этом, когда есть длинная линия спуска class.