Переопределение метода с использованием типа Strasure

Сегодня я наткнулся на что-то интересное. Предположим, что следующие класс Java 6:

public class Ereasure {

    public Object get(Object o) {
        return null; // dummy
    }

    public  static class Derived<T> extends Ereasure{
        // (1)
        @Override
        public Object get(T o) {
                return super.get(o);
        }
        // (2)
        /*
        @Override
        public Object get(Object o) {
                return super.get(o);
        }*/

    }
}

Если вы пытаетесь компилировать вышеприведенный пример, компилятор говорит Ereasure.java:9: метод не переопределяет или не реализует метод от Supertype @ @Override. Если вы удалите аннотацию @override (что не нужно!), Он говорит Ereasure.java:8: имя clash: get (t) в ereasure.derived и get (java.lang.Object) в эрегах имеют одинаковую стирание, однако не переопределяют другое Это немного противоречит, поскольку T следует избежать объекта, и для того, чтобы переопределить метод получения родительских классов.

Если вы уйдете (1) ненотенные и безответные (2) так (1) перегрузки (2), это тоже не будет работать. Вывод компилятора:

Ereasure.java:15: get(T) is already defined in Ereasure.Derived
  public Object get(Object o) {

как вывод, T не активен для объекта, но не может переопределить метод получения родителей.

Мой вопрос сейчас, почему не по крайней мере, один из примеров компиляции?

10
задан Ocaso Protal 31 August 2011 в 14:17
поделиться