Files
obsidian/Программирование на Java/ООП/Наследование/Наследование.md
T
roma-dxunvrs f57762fd3b Init
2026-09-03 21:40:46 +03:00

2.8 KiB

Создание новых классов на основе существующих с сохранением или расширением функциональности. При этом реализуется иерархия классов, связанных отношением "is-a". Наследуются:

  • поля и методы с модификаторами public и protected
  • поля и методы без модификатора доступа, если подкласс и суперкласс в одном пакете Не наследуются:
  • поля и методы с модификатором private (не доступны)
  • Конструкторы
  • Блоки инициализации Если имя поля в подклассе и в суперклассе одинаковое
  • Поле подкласса скрывает поле суперкласса
  • Статическое поле суперкласса доступно по имени класса BaseClass.staticField
  • Нестатическое поле суперкласса доступно с помощью super: super.instanceField
  • Скрытое поле может иметь другой тип Если сигнатура (имя и параметры) статического метода в подклассе и в суперклассе одинаковая
  • Статический метод подкласса скрывает метод суперкласса
  • Статический метод суперкласса доступен по имени класса BaseClass.staticMethod() Если сигнатура (имя и параметры) нестатического метода в подклассе и в суперклассе одинаковая
  • Метод подкласса переопределяет метод суперкласса
  • Метод суперкласса доступен с помощью super: super.instanceMethod()
  • Доступ к переопределенному методу нельзя уменьшать
    • Если в суперклассе public - в подклассе тоже public
    • Если в суперклассе protected - в подклассе protected или public

Если коротко:

  • Поля - сокрытие (+ компилятор смотрит на тип ссылки)
  • Статик методы - сокрытие (+ компилятор смотрит на тип ссылки)
  • Нон-статик методы - переопределение

Ключевое слово extends, множественное наследование запрещено (это решают Интерфейсы) Подробнее про Сокрытие и Переопределение