Files
obsidian/Программирование на Java/ООП/Наследование/Наследование.md
T
roma-dxunvrs 4fabe16272 04.09
2026-09-04 22:55:43 +03:00

33 lines
3.1 KiB
Markdown

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