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