Наследование
Классификация всегда подразумевает древообразную структуру. Наглядным примером может служить биологическая классфикация, предложенная еще в 18 веке Карлом Линнеем.
ООП прекрасно усвоило эту идею. Все представители определенного класса имеют общие признаки и общее поведение. Но должна быть возможность создать класс, который ведет себя немного не так. Т.е. должна быть возможность “переопределить” методы. Это открывает большие возможности. Представим себе, что мы получили от сторонних разработчиков замечательный набор готовых классов для графического интерфейса. В нем есть кнопки, списки, таблицы, изображения. Мы этим пользуемся и в какой-то момент времени нам настоятельно требуется несколько изменить поведение определенного класса. Например надо, чтобы стандартный выпадающий список имел возможность постраничного вывода. В процессе изучения Java мы познакомимся со стандартной библиотекой графических элементов Swing. Это не означает, что мы будем ее подробно изучать – это просто очень наглядный способ познакомиться с идеями ООП. На примерах мы посмотрим как работает парадигма наследования.
Само по себе наследование реализуется достаточно просто – при указании класса вы указываете дополнительно класс от которого вы хотите унаследоваться. Обратите внимание, что ваш новый класс сразу станет уметь делать то, что есть в классе-родителе (еще используют выражение родительский класс).
Класс может быть наследником другого класса, наследуя его все открытые и защищенные методы, а также возможность доступа к полям аналогичной степени доступности. Пример наследования класса представлен в листинге 4.9.
Листинг 4.9.
Пример наследования класса
В ООП (объектно-ориентированном программировании) есть также ссылка super. Она работает так же, как this, только вызывает методы и поля суперкласса, т.е. родительского класса (листинг 4.10).
Листинг 4.10.
Пример использования ссылки super
Возможно так называемое переопределение методов. Скажем, в базовом и дочернем классах есть методы с одинаковым именем и одинаковыми параметрами. В таком случае уместно говорить о переопределении методов, т.е. в дочернем классе изменяется реализация уже существовавшего в базовом классе метода. Поля нельзя переопределить, их можно только скрыть. Рассмотрим переопределение методов (листинг 4.11).
Листинг 4.11.
Переопределение методов
Если пометить метод модификатором final, то метод не может быть переопределен. Иногда требуется, чтобы методы были не определены, а только объявлены (т.е. не была бы представлена реализация метода). Такие методы могут быть реализованы в дочерних классах.
В таком случае их нужно пометить как abstract (при этом класс, который содержит данный метод, должен быть тоже объявлен как абстрактный). Приведем пример подобного класса (листинг 4.12).
Листинг 4.12.
Пример использования модификатора abstract для объявления класса
Практический урок по теме: Урок 9. Основы языка JAVA. Наследование в java