Иллюстрированный самоучитель по Java

Как описать класс и подкласс

Переопределение методов приводит к интересным результатам. В классе Pet мы описали метод voice(). Переопределим его в подклассах и используем в классе chorus, как показано в листинге 2.2.

Листинг 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() являются абстрактными.

Иллюстрированный самоучитель по Java › Объектно-ориентированное программирование в Java › Как описать класс и подкласс
Рис. 2.1. Результат выполнения программы Chorus

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.