Я не совсем понимаю вашу проблему:
Когда я реализовал вашу первую часть исходного кода и скомпилировал с использованием javac *.java
, он скомпилировался нормально. Однако, если я изменил ваш SubClass.getNumber()
метод, чтобы сделать это ...
/* (non-Javadoc)
* @see constraint.base.BaseClass#getNumber()
*/
@Override
public <T extends Number> T getNumber() {
// TODO Auto-generated method stub
return super.getNumber();
}
Я получаю следующую ошибку:
SubClass.java:18: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Number
return super.getNumber();
^
1 error
Причина приведенного выше кода заключается в том, что при вызове super.getNumber()
компилятор не получает никакого ввода типа T
, следовательно, он не может определить, что T
будет возвращено super.getNumber()
и, таким образом не может удовлетворить тип возврата с SubClass.getNumber()
Теперь, чтобы получить ошибку от компилятора, "The method getNumber() of type SubClass must override a superclass method"
, ваш BaseClass
должен был быть abstract вместе с его getNumber()
методом.
Что касается второго предоставленного вами кода, подкласс может, по сути, вызвать super.getNumber()
, так как компилятор будет знать (при компиляции), что тип общего параметра подкласса выводится для типа параметра BaseClass
.
Кроме того, я действительно не знал, что вы пытаетесь спросить.