2013-08-28 2 views
-2

У меня есть супер класс с окончательным методомJava: Принуждение Не Override

public final void foo(){ ... }

+0

Вы можете добавить метод с тем же именем, но другую подпись. Или компилятор вас беспокоит. –

+1

Похоже, у вас проблемы с дизайном. Если у child 'foo' нет другой подписи или супер' foo() 'не является окончательным, я не вижу, чтобы это произошло. – rocketboy

+0

Мне нужно, чтобы оба метода были одинаковыми, мне интересно, есть ли какая-то аннотация для этой цели. – Ahmad

ответ

1

Нет, вы не можете это сделать.

Переопределение метода в подклассе с его методом суперкласса с пометкой final невозможно . Вы можете добавить метод с другой подписью

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

1

Вы не можете переопределить метод super, но можете его перегрузить.

Сделать окончательный метод, только если он имеет реализацию, которая не должна изменяться, и она имеет решающее значение для согласованного состояния объекта.

1

Основная цель финала - предотвратить переопределение. Таким образом, вы не можете переопределять конечные методы. Все еще вы можете перегружать окончательные методы.

0

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

Если вашему подклассу требуется реализация интерфейса, которая мешает этому методу, рассмотрите внутренний класс для реализации этого интерфейса.

В противном случае метод в подклассе не отменяет суперкласса метод с тем же именем, если либо:

  • он имеет различные типы параметров
  • суперкласс метод является частным
  • суперкласс метод упаковки -private и подкласс находится в другом пакете