Основы программирования на языке Java. Сухов С.А. - 28 стр.

UptoLike

Составители: 

31
p1 = 30, 40, 10
р2 = 0, 0, 0
р = 4, 6
p1.distance(p2) = 50.9902
p1.distance(4, 6) = 2.23607
p1.distance(p) = 2.23607
Обратите вниманиемы получили ожидаемое расстояние между
трехмерными точками и между парой двумерных точек. В примере
используется механизм, который называется динамическим назначением
методов (dynamic method dispatch).
3.12. Динамическое назначение методов
Давайте в качестве примера рассмотрим два класса, у которых имеют
простое родство подкласс
/суперкласс, причем единственный метод суперкласса
замещен в подклассе.
class A {
void callme() {
System.out.println("Вызван callme метод класса А");
}
class В extends A {
void callme() {
System.out.println("Вызван callme метод класса B");
}
}
class Dispatch {
public static void main(String args[]) {
A a = new B();
a.callme();
}
}
Обратите внимание, внутри метода main мы объявили переменную «а»
класса «А», а проинициализировали ее ссылкой на объект класса «В».
В следующей строке мы вызвали метод callme. При этом транслятор
проверил
наличие метода callme у класса «А», а исполняющая система, увидев, что на
самом деле в переменной хранится представитель класса «В», вызвала не метод
класса «А», а callme класса «В». Ниже приведен результат работы этой
программы: