Наследование является центральной концепцией в объектно-ориентированном программировании (ООП) и часто рассматривается как один из кирпичиков для повышения эффективности. В этом учебном пособии ты углубишь свое понимание наследования в Java. Ты научишься, как работать с модификаторами доступа, использовать конструкторы и какую роль инкапсуляция играет в наследовании.
Основные выводы
- Наследование позволяет унаследовать свойства и методы класса.
- Модификатор доступа private ограничивает доступ к переменным или методам, в то время как protected позволяет расширенный доступ внутри классов, унаследовавших от оригинального класса.
- Конструкторы должны вызываться в подклассе, чтобы объекты корректно инстанцировались.
- Методы интерфейсов могут использоваться обобщенно, если у вас есть несколько специфических классов.
Пошаговая инструкция
Модификаторы доступа: protected vs. private
Если в классе, таком как Vehicle, ты объявляешь переменную (например, цвет) как protected, то ты можешь использовать эту переменную в производном классе (например, Car) напрямую. Однако если ты объявляешь переменную как private, ты не можешь получить к ней доступ напрямую в подклассе.

Это означает, что доступ к private-переменным возможен только через сеттеры и геттеры.
Пример показывает, что мы должны использовать setFarbe и getFarbe, чтобы получить доступ к private переменной farbe.

Если переменная объявлена как protected, ты можешь просто получить к ней доступ в классе Car и изменить значение.
Использование конструкторов в наследовании
При определении подкласса ты должен убедиться, что конструктор суперкласса вызывается корректно.

Это гарантирует, что цвет при создании объекта Car будет правильно инициализирован.

Обрати внимание, что ты в подклассе определяешь конструктор, который адекватно передает параметры суперкласса.
Наследование и вызов методов
Два класса, Vehicle и Car, позволяют использовать общие переменные и методы. Если ты определяешь метод в Vehicle, ты также можешь использовать этот метод в Car без его повторного написания.

Здесь вызывается метод fahrzeugFarbeAusgeben и выводит значение цвета, которое предоставляется методом getFarbe.
Ограничения при доступе к методам
Если ты попытаешься вызвать метод в подклассе, который недоступен для класса, ты получишь ошибку компиляции. В нашем примере объект Vehicle должен быть передан, чтобы вызвать метод getFarbe.

Это на практике означает, что ты должен убедиться, что метод соответствует твоему типу данных, прежде чем его вызывать. Таким образом, ты можешь передать велосипед, машину или обе сущности в метод, который просто ожидает объекты Vehicle.
Пример вызова методов экземпляра в статических контекстах
Обрати внимание, что в статических методах (static) ключевое слово this не может использоваться, так как не ссылается на конкретный экземпляр. В таких случаях стоит, возможно, использовать другой метод или реорганизовать логику.

Этот вызов правильно выводит цвет для объекта meinAuto.
Резюме - Наследование в Java: Путеводитель для начинающих
Наследование является важной концепцией в программировании на Java, которая помогает тебе модульно организовать и повторно использовать код. В этом учебном пособии ты познакомился с основами модификаторов доступа, конструкторов и вызовов методов в контексте наследования.
Часто задаваемые вопросы
Как я могу получить доступ к private переменным в подклассе?К private переменным в подклассе нельзя получить доступ напрямую. Используй методы геттеры и сеттеры.
В чем разница между protected и private?protected позволяет доступ в подклассе и в том же пакете, тогда как private доступен только внутри собственного класса.
Нужно ли мне определять конструктора в подклассе?Да, если ты изменил конструктор суперкласса, ты также должен соответствующим образом определить конструкторы в подклассе.
Могу ли я свободно переопределять методы суперклассов в подклассах?Да, ты можешь переопределять методы, которые не помечены как final или static, в подклассе, чтобы реализовать специфическое поведение.