2015-07-10 3 views
1

При реализации сопоставимого интерфейса для класса мы переопределяем метод compareTo?

Если да, кто изначально определил метод compareTo, который мы его переопределяем?

Моя догадка заключается в том, что мы не переопределяем в том смысле, что не было другой реализации до того, как мы ее переопределяем, а добавляем @override, потому что мы реализуем интерфейс. Во всяком случае сегодня меня спросили об этом конкретно, и я не был уверен.Java Comprable переопределяет или не переопределяет compareTo?

+1

Интерфейс ['Comparable'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html) определяет контракт, который требуется реализовать, который включает в себя' compareTo'. Аннотирование '@ Override' - это проверка времени компиляции, чтобы убедиться, что ваши намерения (метода, который, по вашему мнению, вы переопределяете) соответствуют действительности (с тем, что можно переопределить). Например, если вы случайно вызываете метод 'compareto', вы получите две ошибки, одна из которых не соответствует контрактным требованиям интерфейса, а другая, поскольку компилятор не может найти именованный метод в иерархии классов. – MadProgrammer

+0

. Вы задаете вопрос: не ясно! Вы хотите знать, кто проектировал API? Или что такое использование @override? –

+0

Добавив @override, мы переопределяем реализацию по умолчанию compareTo? Была ли такая реализация по умолчанию в классе Object (родительский)? – apadana

ответ

2

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

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

Но тогда возникла бы путаница в переопределении абстрактного метода из суперкласса; какую аннотацию следует использовать в этом случае. Чтобы все было просто, для этой цели есть только одна аннотация: @Override.

+0

Спасибо. Это действительно очистило мой разум. Очень хорошо объяснено. – apadana

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