x

Наследование

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

  • поля и методы с модификаторами public и protected
  • поля и методы без модификатора доступа, если подкласс и суперкласс в одном пакете

Не наследуются:

Если имя поля в подклассе и в суперклассе одинаковое

  • Поле подкласса скрывает поле суперкласса
  • Статическое поле суперкласса доступно по имени класса BaseClass.staticField
  • Нестатическое поле суперкласса доступно с помощью super: super.instanceField
  • Скрытое поле может иметь другой тип

Если сигнатура (имя и параметры) статического метода в подклассе и в суперклассе одинаковая

  • Статический метод подкласса скрывает метод суперкласса
  • Статический метод суперкласса доступен по имени класса BaseClass.staticMethod()

Если сигнатура (имя и параметры) нестатического метода в подклассе и в суперклассе одинаковая

  • Метод подкласса переопределяет метод суперкласса
  • Метод суперкласса доступен с помощью super: super.instanceMethod()
  • Доступ к переопределенному методу нельзя уменьшать
    • Если в суперклассе public - в подклассе тоже public
    • Если в суперклассе protected - в подклассе protected или public

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

  • Поля - сокрытие (+ компилятор смотрит на тип ссылки)
  • Статик методы - сокрытие (+ компилятор смотрит на тип ссылки)
  • Нон-статик методы - переопределение
  • Статик на нон-статик и наоборот у методов - нельзя
  • Статик на нон-статик и наоборот у полей - можно

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

Left-click: follow link, Right-click: select node, Scroll: zoom
x