Можно ли заменить "переопределить абстрактные методы" на "реализовать абстрактные методы" в наследовании Java?

В наследовании Java можно ли взаимозаменяемо использовать выражение "переопределение абстрактного метода" с выражением "реализация абстрактного метода"?

В книге "OCA Java SE 8 Programmer I Study Guide", глава 5, стр. 296, вопрос № 15 я встретил следующий вопрос:

Q: Что из следующего верно в отношении конкретного подкласса? (Выберите все подходящие варианты)

  • A. Конкретный подкласс может быть объявлен как абстрактный.
  • Б. Конкретный подкласс должен реализовывать все унаследованные абстрактные методы.
  • C. Конкретный подкласс должен реализовывать все методы, определенные в унаследованном интерфейсе.
  • D. Конкретный подкласс не может быть помечен как окончательный.
  • E. Абстрактные методы не могут быть переопределены конкретным подклассом.

Мой ответ был B & E. Но в книге сказано, что правильный ответ - только B. Мой вопрос касается именно варианта E. В книге сказано, что вариант E неверен, потому что абстрактные методы должны быть переопределены конкретным подклассом. Первоначально я думал, что абстрактные методы должны быть реализованы до того, как они будут переопределены подклассом. Так почему же опция неверна?

2 ответа

Позвольте мне объяснить каждый пункт по одному.

A. Конкретный подкласс может быть объявлен как абстрактный.

Ответ: неверно.

По определению, конкретные классы - это те, которые can be instantiated и этот класс can also extends базовый абстрактный класс.

Б. Конкретный подкласс должен реализовывать все унаследованные абстрактные методы.

Ответ: правильно

Если методы помечены как abstracts в базовом классе дочерний класс, расширяющий базовый класс, должен убедиться, что все абстрактные методы реализованы. You will otherwise get a compile time error,

C. Конкретный подкласс должен реализовывать все методы, определенные в унаследованном интерфейсе.

Ответ: неверно

это только тот случай, когда конкретный подкласс имеет directly implemented the interface by this class itself,

Но в этом случае базовый класс может реализовывать унаследованный интерфейс.Hence, для конкретного подкласса не обязательно реализовывать все методы, присутствующие в базовом классе, в результате наследования от интерфейса.

D. Конкретный подкласс не может быть помечен как окончательный.

Ответ: неверно

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

С помощью неизменяемых классов мы можем вызывать методы доступа (например, методы-получатели), копировать объекты или передавать объекты - но ни один метод не должен позволять изменять состояние объекта. Примеры: String, классы-оболочки, такие как Float, Integer.etc.

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

Ответ: неверно

По определению, абстрактные методы - это методы, которые только объявлены, но не содержат тела или реализации. И поскольку мы не можем создать экземпляр абстрактного класса, мы можем создавать подклассы для реализации этих определенных абстрактных методов.Hence abstract methods are not optional but mandatorily be overridden by a inheriting subclass,

Абстрактный метод - это метод, который объявлен, но не содержит реализации.

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