33 lines
3.1 KiB
Markdown
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]] |