Иерархия
Иерархия объектов давно используете для их классификации. Особенно детально она проработана в биологии. Все знакомы с семействами, родами и видами. Мы можем сделать описание своих домашних животных (pets): кошек (cats), собак (dogs), коров (cows) и прочих следующим образом:
class Pet{ // Здесь описываем общие свойства всех домашних любимцев Master person; // Хозяин животного int weight, age, eatTimel]; // Вес, возраст, время кормления int eat(int food, int drink, int time){ // Процесс кормления // Начальные действия… if (time == eatTimefi]) person.getFood(food, drink); // Метод потребления пищи } void voice(); // Звуки, издаваемые животным // Прочее… }
Затем создаем классы, описывающие более конкретные объекты, связывая их с общим классом:
class Cat extends Pet{ // Описываются свойства, присущие только кошкам: int mouseCatched; // число пойманных мышей void toMouse(); // процесс ловли мышей // Прочие свойства } class Dog extends Pet{ // Свойства собак: void preserve(); // охранять }
Заметьте, что мы не повторяем общие свойства, описанные в классе Pet. Они наследуются автоматически. Мы можем определить объект класса Dog и использовать в нем все свойства класса Pet так, как будто они описаны в классе Dog:
Dog tuzik = new Dog(), sharik = new Dog();
После этого определения можно будет написать:
tuzik.age = 3; int p = sharik.eat (30, 10, 12);
А классификацию продолжить так:
class Pointer extends Dog{… } // Свойства породы Пойнтер class Setter extends Dog{… } // Свойства сеттеров
Заметьте, что на каждом следующем уровне иерархии в класс добавляются новые свойства, но ни одно свойство не пропадает. Поэтому и употребляется слово extends – "расширяет" и говорят, что класс Dog – расширение (extension) класса Pet. С другой стороны, количество объектов при этом уменьшается: собак меньше, чем всех домашних животных. Поэтому часто говорят, что класс Dog – подкласс (subclass) класса Pet, а класс Pet – суперкласс (superclass) или надкласс класса Dog.
Часто используют генеалогическую терминологию: родительский класс, дочерний класс, класс-потомок, класс-предок, возникают племянники и внуки, вся беспокойная семейка вступает в отношения, достойные мексиканского сериала.
В этой терминологии говорят о наследовании (inheritance) классов, в нашем примере класс Dog наследует класс Pet.
Мы еще не определили счастливого владельца нашего домашнего зоопарка. Опишем его в классе Master. Делаем набросок:
class Master{ // Хозяин животного String name; // Фамилия, имя // Другие сведения void getFood(int food, int drink); // Кормление // Прочее }
Хозяин и его домашние животные постоянно соприкасаются в жизни. Их взаимодействие выражается глаголами "гулять", "кормить", "охранять", "чистить", "ласкаться", "проситься" и прочими. Для описания взаимодействия объектов применяется третий принцип объектно-ориентированного программирования – обязанность или ответственность.