1) Можно использовать, непосредственно создавая объект (как локальную переменную).
2) Композиция или агрегирование. Помещаем объект во внутрь нового класса. Объект – поле нового класса.
Класс – автомобиль. Класс – двигатель помещается в виде поля в класс автомобиль.
3) Наследование
Базовый тип содержит поля и методы общие для всех производных типов (характеристики и действия).
Пример:
Новый тип (дочерний) повторяет интерфейс родителя. Он гарантировано принимает те же сообщения. Кроме этого в производный класс включаются новые методы либо изменяются методы базового класса (переопределение (overriding) или замещение метода).
4) Полиморфизм
С объектом производного класса можно обращаться как с базовым. Это позволяет легко модифицировать программы.
Например, метод:
void doStuff (Shape shape)
{
shape.erasе ();
…
shape.draw ();
}
Другая часть программы:
Circle circle = new Circle ();
Triangle triangle = new Triangle ();
Square square = new Square ();
doStuff (circle);
doStuff (triangle);
doStuff (square);
Обращение с производными типом как с базовым называется восходящим преобразованием – апкастинг (upcasting).
Вызовы работают правильно, будут вызваны методы нужного объекта. Все методы в Java-виртуальные (термин С++). Это реализуется путем позднего связывания.
Позднее(или динамическое) связывание: код метода подставляется в нужное место не во время компиляции, а во время исполнения. Подстановка во время компиляции – это раннее (или статическое) связывание.