Правила наследования в Java

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Данная статья:

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего "Самоучителя по Java"

Привет! В этой статье мы расскажем об одном из основополагающих принципов ООП, который Вам обязательно нужно понять - наследование.

Что такое наследование?

Наследование (англ. inheritance) - это механизм, позволяющий создавать классы на  основе другого класса.

Так, один класс может "наследовать" характеристики другого - его методы и переменные.

  • Класс, являющийся основой, называют: базовым, супер, родительским.
  • Класс, который создают, называют: потомок, наследник или производный класс.

Пример

Представим, что у нас есть класс Dog. Что есть у каждой собаки? Четыре лапы, один хвост  - и еще они умеют гавкать и вилять хвостом.

А теперь представим, что мы хотим создать классы для разных пород - овчарок, бульдогов и болонок.

У всех овчарок, бульдогов и болонок тоже будет четыре лапы и хвост, они тоже будут гавкать и вилять хвостом.

Конечно, мы можем просто брать и копировать эти методы и переменные в каждый класс. Но зачем? Мы можем использовать наследование.

Если мы сделаем все классы пород наследниками класса Dog, они будут иметь доступ ко всем его методам и переменным автоматически. Ну, почти ко всем.

Естественно, сама Джава тоже использует механизм наследования. Например, все классы языка наследуют класс Object, а классы ArrayList и LinkedList - класс List.

Как наследовать?

Наследование - это просто.

Для того, чтобы унаследовать класс, нужно использовать ключевое слово extends:

Как видите, ключевое слово ставится после названия класса:

Правила наследования

Правило 1. Наследуем только один класс.

Java не поддерживает наследование нескольких классов. Один класс - один родитель.

Обратите внимание - нельзя наследовать самого себя!

Правило 2. Наследуется все кроме приватных переменных и методов.

Выше мы говорили, что класс-наследник будет иметь доступ ко всем переменным и методам родителя. Это не совсем так.

На самом деле, все методы и переменные, помеченные модификатором private, не доступны классу-наследнику.

Правило 3. Переделать метод класса-родителя.

Представим, что мы наследуем класс, но нам нравится не все, что мы унаследовали. Допустим мы хотим, чтобы определенный--- метод работал не так, как в родителе.

Для того, чтобы переопределить метод класса-родителя, пишем над ним @Override:

Правило 4. Вызываем методы родителя через ключевое слово super.

Представим, что Вы хотите изменить метод родительского класса совсем чуть-чуть - буквально дописать пару строк. Тогда в своем методе мы можем вызвать родительский метод с помощью ключевого слова super.

Например, у нас есть класс Dog с методом voice():

Кроме того, у нас есть класс Dobermann, который наследует класс Dog и имеет свой метод voice(). В нем мы вызываем родительский метод через ключевое слово super:

Теперь, вызовем метод voice() из класса Dobermann:

В консоли мы увидим следующее:

Таким образом, видим, что voice() сначала вызвал метод из родительского класса, а потом вывел в консоль строку "Hello World from Dobermann class!".

Правило 5. Запрещаем наследование.

Если Вы не хотите, чтобы кто-то наследовал Ваш класс, поставьте перед ним модификатор final. Например:

Теперь попробуем создать наследника:

Получим ошибку:

 


Надеемся, что наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java.  Детальнее у нас на сайте.

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr
Самоучители--узнать детальнее--