Конкретный метод в абстрактном классе

Я понимаю, что абстрактный класс может содержать абстрактные и конкретные методы (то есть с реализацией тела). Мой вопрос: могут ли подклассы наследовать / переопределять конкретные методы от абстрактного суперкласса. И во-вторых, должны ли они реализовывать конкретные методы так же, как они реализуют абстрактные методы?

3 ответа

Решение

могут подклассы наследовать / переопределять конкретные методы от абстрактного суперкласса

Если они не finalДа, они могут быть переопределены.

И во-вторых, должны ли они реализовывать конкретные методы так же, как они реализуют абстрактные методы?

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

Конкретный метод означает, что метод имеет полное определение, но его можно переопределить в унаследованном классе. Если мы сделаем этот метод "окончательным", то он не может быть переопределен. Объявление метода или класса "final" означает, что его реализация завершена. Обязательно переопределять абстрактные методы в подклассе, иначе подкласс также будет абстрактным классом и должен быть объявлен абстрактным.

Могут ли подклассы наследовать / переопределять конкретные методы от абстрактного суперкласса?

Подклассы будут наследовать все методы, которые отмечены public или же protected, если подкласс находится в другом пакете, чем родительский класс. Если подкласс находится в том же пакете, он наследует все методы, кроме private методы.

Подкласс должен переопределять / реализовывать абстрактные методы и может переопределять / реализовывать конкретные методы, если они не помечены как final,

Должны ли они наследовать конкретные методы так же, как они наследуют абстрактные методы?

Нет, им не нужно реализовывать конкретные методы. Но они могут переопределить конкретные методы, если они не отмечены final,

Конкретные методы в Java - не что иное, как любые другие обычные методы. Методы, которые не являются абстрактными, называются конкретными методами в Java. Если мы хотим выполнить эти конкретные методы, создайте экземпляр (объект) класса и вызовите этот конкретный метод.

Если вы объявляете абстрактный метод в классе, то вы должны также объявить абстрактный класс. Вы не можете иметь абстрактный метод в конкретном классе. В Java невозможно создать экземпляр абстрактного класса. Абстрактный класс может содержать абстрактные и конкретные методы (то есть с реализацией тела).

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

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

Могут ли подклассы наследовать конкретные методы от абстрактного суперкласса.

Они >> действительно<< наследуют их, если не отменяют их. (Помимоprivate методы, которые никогда не наследуются и не переопределяются в Java.)

Могут подклассы переопределять конкретные методы абстрактного суперкласса.

Да, они могут их преодолеть. (Помимоprivate методы, которые никогда не наследуются и не переопределяются в Java.) Однако они не обязаны это делать.

А во-вторых, должны ли они реализовывать конкретные методы так же, как абстрактные методы?

Если вы спрашиваете, должен ли подкласс "реализовывать" конкретный метод, определенный в абстрактном суперклассе:

Нет, они не обязаны, но могут, и если они это сделают, это называется переопределением.

Если вы спрашиваете, совпадает ли переопределение конкретного метода с реализацией абстрактного метода:

Нет, не совсем то же самое. В реализации абстрактного метода вы обычно не можете использоватьsuper для делегирования переопределенного метода, определенного далее по цепочке суперкласса.

Если вы спрашиваете, выглядит ли переопределение конкретного метода так же, как реализация абстрактного метода:

Да. Синтаксис такой же. (Вы просто не можете делегировать, используяsuperв последнем случае; см. выше.)


Примечание: почти все вышеперечисленное также верно, когда подкласс также является абстрактным; т.е. абстрактный подкласс абстрактного суперкласса.

Другие вопросы по тегам