|
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.