3.12. Динамическое назначение методов

Давайте в качестве примера рассмотрим два класса, у которых имеют простое родство подкласс/суперкласс, причем единственный метод суперкласса замещен в подклассе.

class А { void callmeO {

System.out.prmtm("Bbi3BaH callme метод класса А"); }

class В extends А { voidcallme() {

Systern.out.println("Bbi3BaH callme метод класса В");

} }

class Dispatch {

public static void main(String args[]) {

A a = new BQ;

a.callmeO;

} }

Обратите внимание, внутри метода main мы объявили переменную «а» класса «А», а проинициализировали ее ссылкой на объект класса «В». В следующей строке мы вызвали метод callme. При этом транслятор проверил наличие метода callme у класса «А», а исполняющая система, увидев, что на самом деле в переменной хранится представитель класса «В», вызвала не метод класса «А», a callme класса «В». Ниже приведен результат работы этой программы:

 «Вызван callme метод класса В»

Рассмотренная форма динамического полиморфизма времени выполнения представляет собой один из наиболее мощных механизмов объектно-ориентированного программирования, позволяющих писать надеж­ный, многократно используемый код.