Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Java core. Method overriding rules

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Здравствуйте!
Читая спецификацию Java 7, у меня возник вопрос. Мне не понятна тема Erasure Affects Overriding.
В спецификации приведено два примера вызывающих ошибку компиляции. Мне не ясны условия при которых возникают данные ошибки. Привожу примеры с книги:

A class cannot have two member methods with the same name and type erasure:
class C<T> {
    T id (T x) {...}
}
class D extends C<String> {
    Object id(Object x) {...}
}

Two different methods of a class may not override methods with the same erasure:

class C<T> {
    T id(T x) {...}
}
interface I<T> {
    T id(T x);
}
class D extends C<String> implements I<Integer> {
   public String  id(String x)  {...}
   public Integer id(Integer x) {...}
}

Может ли кто то объяснить почему возникают ошибки и, в частности, что значит

The two methods have the same erasure

?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Для второго примера: в процессе компиляции, вся информация о дженериках теряется, и в результате остается два одинаковых метода:

public Object id(Object x) {...}
public Object id(Object x) {...}

До JDK 5 при переопределении метода возвращаемые типы должны точно совпадать. В 5-й JDK появилась т.н. ковариантность типов, что означает возможность наличия другого возвращаемого типа, если он является наследником первоначального

Если после стирания типов у них остаеться одинаковая сигнатура, то очевидно что перегруживать их не получиться.

Підписатись на коментарі