Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
В(int a, int b, int с) {
super (а, Ь);
к = с;
}
void show() {
// Использование ключевого слова super для
// вызова метода show(), определенного в классе А.
super.show();
System.out.println("k: " + k);
}
}
Если подставить новый вариант метода show () в предыдущую версию рассматриваемого здесь фрагмента кода, результат его выполнения изменится и будет иметь следующий вид:
i and j: 1 2
k: 3
В данном случае super. show () — это вызов метода show (), определенного в суперклассе.
Переопределение метода происходит только в том случае, если сигнатуры переопределяемого и переопределяющего методов совпадают. В противном случае происходит обычная перегрузка методов. Рассмотрим следующую видоизмененную версию предыдущего примера:
/* Методы с разными сигнатурами не переопределяются,
а перегружаются. */
class А {
int i, j;
A(int a, int b) {
i = a;
j = b;
}
// отобразить переменные i и j
void show() {
System.out.println("i and j: " + i + " " + j) ;
}
}
// создать подкласс путем расширения класса Л
class В extends А {
int к;
В (int a, int b, int с) {
super(а, Ь);
к = с;
}
// Сигнатуры данного метода и метода show() из класса А отличаются,
// поэтому вместо переопределения происходит перегрузка метода.
void show(String msg) {
System.out.println(msg + k);
}
}
class Overload {
public static void main(String args[]) {
В subOb = new В(1, 2, 3);
subOb.show("This is k: "); // вызывается метод show() из класса В
subOb.show(); // вызывается метод show() из класса А
}
}
Выполнение этого фрагмента кода дает следующий результат:
This is k: 3
i and j: 1 2
На этот раз в варианте метода show () из класса В предусмотрен строковый параметр. И благодаря этому сигнатура данного метода отличается от сигнатуры метода show () из класса А, для которого параметры не предусмотрены. В результате переопределение метода не происходит.
Поддержка полиморфизма
в переопределяемых методах
Примеры из предыдущего раздела демонстрируют переопределение методов, но по ним трудно судить, насколько богатые возможности предоставляет этот механизм. В самом деле, если переопределение методов используется только для соблюдения соглашений о пространствах имен, то его можно рассматривать как любопытную, но почти бесполезную особенность языка программирования. Но это совсем не так. Переопределение методов лежит в основе одного из наиболее эффективных языковых средств Java: динамической диспетчеризации методов, представляющей собой механизм вызова переопределяемых методов, когда выбор конкретного метода осуществляется не на этапе компиляции, а в процессе выполнения программы. Динамическая диспетчеризация методов имеет очень большое значение, поскольку именно с ее помощью принцип полиморфизма реализуется на стадии выполнения программ на Java.