Java -практика использования

        

Пример полиморфного метода



Листинг 2.2. Пример полиморфного метода

abstract class Pet{

   abstract void voice();
 

}



class Dog extends Pet{

   int k = 10;

   void voice(){

      System.out.printin("Gav-gav!");

   }

}

class Cat extends Pet{

   void voice () {

      System.out.printin("Miaou!");
 

   }

}

class Cow extends Pet{ 

   void voice(){

      System.out.printin("Mu-u-u!");

   }

}

public class Chorus(

   public static void main(String[] args){ 

      Pet[] singer = new Pet[3]; 

      singer[0] = new Dog();
 

      singer[1] = new Cat();
 

      singer[2] = new Cow();
 

      for (int i = 0; i < singer.length; i++)

         singer[i].voice();

   }

}

На Рисунок 2.1 показан вывод этой программы. Животные поют своими голосами!

Все дело здесь в определении поля singer[]. Хотя массив ссылок singer [] имеет тип Pet , каждый его элемент ссылается на объект своего типа Dog, Cat, cow . При выполнении программы вызывается метод конкретного объекта, а не метод класса, которым определялось имя ссылки. Так в Java реализуется полиморфизм.

Знатокам C++

В языке Java все методы являются виртуальными функциями.

Внимательный читатель заметил в описании класса Pet новое слово abstract . Класс Pet и метод voice() являются абстрактными.



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