Программирование на языке Java

         

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



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

Давайте в качестве примера рассмотрим два класса, у которых имеют простое родство подкласс / суперкласс, причем единственный метод суперкласса замещен в подклассе. class A { void callme() { System.out.println("Inside A's callrne method"); }} class В extends A { void callme() { System.out.println("Inside B's callme method"); }} class Dispatch { public static void main(String args[]) { A a = new B(); a.callme(); } }

Обратите внимание - внутри метода main мы объявили переменную а класса А, а проинициализировали ее ссылкой на объект класса В. В следующей строке мы вызвали метод callme. При этом транслятор проверил наличие метода callme у класса А, а исполняющая система, увидев, что на самом деле в переменной хранится представитель класса В, вызвала не метод класса А, а callme класса В. Ниже приведен результат работы этой программы: С:\> Java Dispatch Inside B's calime method Совет
Совет

Программистам Delphi / C++ следует отметить, что все Java по умолчанию являются виртуальными функциями (ключевое слово virtual).

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



Содержание раздела