Files
obsidian/Программирование на Java/ООП/Наследование/Наследование.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

33 lines
3.2 KiB
Markdown

Создание новых классов на основе существующих с сохранением или расширением функциональности. При этом реализуется иерархия классов, связанных отношением "is-a".
Наследуются:
- поля и методы с модификаторами public и protected
- поля и методы без модификатора доступа, если подкласс и суперкласс в одном пакете
Не наследуются:
- поля и методы с модификатором private (не доступны)
- [конструкторы](../Конструкторы.md)
- [блоки инициализации](../Блоки%20инициализации.md)
Если имя поля в подклассе и в суперклассе одинаковое
- Поле подкласса скрывает поле суперкласса
- Статическое поле суперкласса доступно по имени класса `BaseClass.staticField`
- Нестатическое поле суперкласса доступно с помощью super: `super.instanceField`
- Скрытое поле может иметь другой тип
Если сигнатура (имя и параметры) статического метода в подклассе и в суперклассе одинаковая
- Статический метод подкласса скрывает метод суперкласса
- Статический метод суперкласса доступен по имени класса `BaseClass.staticMethod()`
Если сигнатура (имя и параметры) нестатического метода в подклассе и в суперклассе одинаковая
- Метод подкласса переопределяет метод суперкласса
- Метод суперкласса доступен с помощью super: `super.instanceMethod()`
- Доступ к переопределенному методу нельзя уменьшать
- Если в суперклассе public - в подклассе тоже public
- Если в суперклассе protected - в подклассе protected или public
Если коротко:
- Поля - сокрытие (+ компилятор смотрит на тип ссылки)
- Статик методы - сокрытие (+ компилятор смотрит на тип ссылки)
- Нон-статик методы - переопределение
- Статик на нон-статик и наоборот у методов - нельзя
- Статик на нон-статик и наоборот у полей - можно
Ключевое слово `extends`, множественное наследование запрещено (это решают [Интерфейсы](../Интерфейсы.md))
Подробнее про [Сокрытие](Сокрытие.md) и [Переопределение](Переопределение.md)
Основа всего - [Класс Object](../../Синтаксис%20и%20типы/Базовые%20типы%20ООП/Класс%20Object.md)