|
Иерархия
Иерархия объектов давно используете
для их классификации. Особенно детально она проработана в биологии. Все знакомы
с семействами, родами и видами. Мы можем сделать описание своих домашних животных
(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); // Кормление
// Прочее
}
Хозяин и его домашние животные постоянно
соприкасаются в жизни. Их взаимодействие выражается глаголами "гулять",
"кормить", "охранять", "чистить", "ласкаться",
"проситься" и прочими. Для описания взаимодействия объектов применяется
третий принцип объектно-ориентированного программирования — обязанность или
ответственность.
|