2012-01-16 7 views
3

Можно создать дубликат:
When do you use Java's @Override annotation and why?
Java, What does @Override mean?Что означает @Override в этом java-коде?

Я проверял Drools Planner пример исходного кода, и я наткнулся на код, как это:

@Override 
protected Solver createSolver() { 
    XmlSolverConfigurer configurer = new XmlSolverConfigurer(); 
    configurer.configure(SOLVER_CONFIG); 
    return configurer.buildSolver(); 
} 

protected Solver createSolverByApi() { 
    // Not recommended! It is highly recommended to use XmlSolverConfigurer with an XML configuration instead. 
    SolverConfig solverConfig = new SolverConfig(); 

    solverConfig.setSolutionClass(NQueens.class); 
    .....TRUNCATED.... 
    solverPhaseConfigList.add(localSearchSolverPhaseConfig); 
    solverConfig.setSolverPhaseConfigList(solverPhaseConfigList); 
    return solverConfig.buildSolver(); 
} 

As насколько я понимаю createSolver() и createSolverByApi() должны возвращать объекты Solver, когда вы их явно вызываете.

Что здесь означает @Override? Каково общее значение термина @?


EDIT: Мой очень плохо; I непреднамеренно дублируется What does @Override mean?

+3

По крайней мере, сделать * некоторые * попытку чтения документации ... http://docs.oracle .com/javase/6/docs/api/java/lang/Override.html – skaffman

ответ

8

@ является Java Annotations.

@Override означает, что метод переопределяет родительский класс (в данном случае createSolver).

В Javadoc состояния для @Override:

Указывает, что объявление метода предназначена для переопределения декларации метод в суперкласса.

Эта аннотация полезна для проверки времени компиляции, чтобы убедиться, что метод, который вы переопределяете, действителен (правильно переопределен).

+0

Итак, можно ли вообще переопределить метод без этого? Что произойдет, если это исключено, если метод предназначен для перезаписи другого? –

+0

Это может быть отменено без аннотации. Это просто помогает разработчикам понять, что существует метод родительского класса, который был переопределен дочерним классом. –

2

Это называется Annotation. Он фактически не компилируется в специальный код, но помогает избежать ошибок: по существу, он указывает, что метод переопределяет метод superclass. Отсутствие этой аннотации может привести к предупреждениям , имеющих эту аннотацию, но без суперкласса, который имеет метод с тем же аннотацией, является даже ошибкой .

Это позволяет избежать ошибок рефакторинга: если метод в superclass переименован, а переопределение нет, то оно станет ошибкой.

+0

Не имеет особого значения для компилятора ... как он может сгенерировать ошибку компиляции, если компилятор не присваивает ей особого значения. См. Мой ответ. Это обсуждается в разделе «Аннотации, используемые в компиляторе», поэтому он, безусловно, имеет особое значение для компилятора – Robin

+0

Как и в случае отсутствия времени ожидания во время AFAIK. –

+0

@ Anony-Mousse хорошее объяснение так +1 также я отредактировал ваш ответ для правильного написания – SpringLearner

3

См. Java tutorial about annotations, а также раздел «Аннотации, используемые в компиляторе». Быстро копипаст из соответствующей части

@ Override-на @Override аннотацию информирует компилятор о том, что элемент предназначается, чтобы переопределить элемент, объявленный в суперкласс (методы доминирующими будут обсуждаться в уроке под названием " Интерфейсы и наследование ").

0

Это Java аннотаций, в вашем случае, вы будете использовать @Override выше метод, чтобы быть уверенным, что вы перекрытый метод суперкласса, если вы используете его, и этот метод не в родительском классе, потому что вы ее неправильное имя, например, во время компиляции произойдет ошибка.

0

Я хочу добавить следующее: объявлен в суперкласса или метод, объявленный в интерфейсе (с Java 6)

+0

Нет, аннотация вводилась с Java 5. '@ Override' появился с Java 5 (Джошуа Блох). –

+0

, объявленный в суперклассе с java 5 и объявлен в интерфейсе с java6 – Benoit

Смежные вопросы