Почему я получаю методы базового класса посредством отражения, когда подкласс переопределяет их?

У меня есть супер класс как:

class MyClass<T> {
  public void setValue(T value){
    //insert code
  }

  public T getValue(){
    return null;
  }
}

, то у меня есть специфический вывод

class MyClassImp extends MyClass<String> {
  @Override
  public void setValue(String value){
    //insert code
  }

  @Override
  public String getValue(){
    return null;
  }
}

на отражении MyClassimpl как:

Class clazz = MyClassImpl.class;
Method[] methods = clazz.getDeclaredMethods();

Я получаю оба Реализация суперкласса java.lang.Object getValue () , void setValue (java.lang.Object) и java.lang.string getValue () , void setvalue (java.lang.string) .

Согласно Java Documentation Class.getDeclaredMethods () vis-a-viz

Возвращает массив объектов метода, отражающих все методы, объявленные классом или интерфейсом, представленным этим классом объектом. Это включает в себя общедоступные, защищенные, по умолчанию (пакет) и частные методы, но исключает унаследованные методы. Элементы в RADELAY возвращаются не отсортированы и не в каком-либо конкретном порядке. Этот метод возвращает массив длины 0, если класс или интерфейс не объявляют методы, или если этот объект класса представляет собой примитивный тип, класс массива или void. Метод инициализации класса не включен в возвращенный массив. Если класс объявляет множественные методы государственных участников с одинаковыми типами параметров, все они включены в возвращенный массив.

Почему я получаю внедрение супер типа? Есть ли что-то, чего мне не хватает?

Причина, по которой мне нужно, это то, что я вновь вызовут SetValue на реализацию базового класса, что я добавил некоторые специальные комментарии аннотации и, конечно, дополнительные ограничения.

10
задан Joachim Sauer 5 September 2011 в 06:04
поделиться