Найти в Дзене
yagdmitrij

Наследование в java: abstract, protected и final

В Java существует несколько важных модификаторов, которые играют ключевую роль в объектно-ориентированном программировании. Сегодня мы подробно рассмотрим модификаторы abstract, protected и final…завершения цикла статей о наследовании…, их назначение и особенности применения. Итак, abstract – это нечто абстрактное, неясно выраженное, может быть, как класс, так и метод. Разберем сначала для метода. Так, если метод объявлен как abstract, то и класс должен быть объявлен соответственно также. Абстрактный метод не содержит тела и его должен (обязан) реализовать подкласс. Если подкласс не реализует все методы суперкласса, то должен сам быть объявлен как abstract. Когда же используется абстрактный метод? Когда в суперклассе его нельзя реализовать, но он нужен для переопределения (реализации) в его подклассах. К примеру, есть суперкласс Rastenija и его подклассы Borovik, Kartofel и Ogurez. Каждый из подклассов размножается разными способами, поэтому метод в суперклассе razmnogenie() не определ
abstract, protected, final
abstract, protected, final

В Java существует несколько важных модификаторов, которые играют ключевую роль в объектно-ориентированном программировании. Сегодня мы подробно рассмотрим модификаторы abstract, protected и final…завершения цикла статей о наследовании…, их назначение и особенности применения.

Итак, abstract – это нечто абстрактное, неясно выраженное, может быть, как класс, так и метод. Разберем сначала для метода. Так, если метод объявлен как abstract, то и класс должен быть объявлен соответственно также. Абстрактный метод не содержит тела и его должен (обязан) реализовать подкласс. Если подкласс не реализует все методы суперкласса, то должен сам быть объявлен как abstract.

Когда же используется абстрактный метод? Когда в суперклассе его нельзя реализовать, но он нужен для переопределения (реализации) в его подклассах. К примеру, есть суперкласс Rastenija и его подклассы Borovik, Kartofel и Ogurez. Каждый из подклассов размножается разными способами, поэтому метод в суперклассе razmnogenie() не определит для нас способ размножения, в следствии чего, делаем его абстрактным, без реализации (без тела).

abstract String razmnogenie()

А реализацию данного метода оставим для подклассов, т.е. этот метод будет переопределяться в подклассах. Рассмотрим это в коде:

abstract методы и классы
abstract методы и классы

Теперь о абстрактных классах. Мы уже знаем, что если в классе есть абстрактные методы, то и сам класс должен быть объявлен как abstract. Очень важно, что создать объект для абстрактного класса невозможно, это запрещено, поэтому, если мы хотим запретить создание экземпляра класса, его нужно пометить как abstract, даже если в нем нет абстрактных методов. Но даже в таком случае создание ссылочной переменной по-прежнему доступно. Смотрим часть кода из предыдущего примера:

abstract методы и классы
abstract методы и классы

Доступ protected предоставляется к членам суперкласса всем его подклассам, даже тем, которые находятся в другом пакете, и всем остальным, которые находятся с ним в одном пакете. Кроме protected существуют еще public и private. Все они предоставляют тот или иной доступ к классу, методу или переменной...но это тема следующих статей, пока нам нужно запомнить, что особенностью protected будет являться то, что он предоставляет доступ к членам суперкласса подклассам из ДРУГОГО пакета. Обратите внимание в нижеприведенном примере, что доступ из класса, который находится в другом пакете, невозможен!

Final. Также может применяться к переменной, методу, классу, и смысл ее не будет однозначным. Начнем с переменной примитивных типов, которая по своей сути будет является константой. После того, как она будет инициализирована, изменить значение будет уже невозможно. Что нельзя сказать об объектах. В случаях с ними ключевое слово final будет указывать на неизменность самой ссылки, т.е. ссылаться на другой объект она уже не сможет. При этом сам объект может изменяться.

Финальные методы (final) сигнализируют нам о том, что переопределить их в подклассах у нас не получится. То же самое будет, если мы напишем метод с доступом private. Поэтому писать методы с final это так себе…

И последнее – final класс. В этом случае ключевое слово final будет указывать на то, что создание подклассов или, по-другому, производных классов – невозможна, т.е. запрет на наследование. Рассмотрим все это в коде:

protected и final
protected и final

Подведем итоги. Мы рассмотрели такие ключевые слова как abstract, protected и final, используемые в контексте наследования. Правильное использование этих модификаторов позволяет создавать качественный, поддерживаемый и безопасный код. Понимание их особенностей и правильного применения — ключ к профессиональному программированию на Java. С моей точки зрения, здесь большой интерес представляет понятие abstract, так как схоже с интерфейсами, методы которых также нужно реализовывать, и которые в будущем нам предстоит изучить.

А сейчас ставьте лайки, подписывайтесь на канал и вас ждет масса интересных статей по программированию на языке java.

Статьи из цикла о наследовании:

1. Наследование в java. Общие положения

2. Наследование в java: super и переопределение методов

Моя телега, где буду выкладывать полезные штучки по java, а также анонс моих статей.