Я использую параметры ограниченного типа в generic (JAVA).Зачем использовать параметры ограниченного типа в generic, если он принимает объект дочернего класса по умолчанию?
class First<T extends Use>{
T s;
First(T s){
this.s=s;
}
void setS(T s){
this.s=s;
}
void getS(){
System.out.println(s);
}
}
class UseChild extends Use{
public String toString(){
return "I am UseChild";
}
}
class Use{
public String toString(){
return "I am Use";
}
public static void main(String[] args){
First <Use> f1 = new First <Use> (new Use());
f1.getS();
f1.setS(new UseChild());
f1.getS();
}
}
Выход:
I am Use
I am UseChild
До сих пор его нормально. Я думал, что могу передать дочерний объект класса setS(), потому что «T extends Use» присутствует в параметре «Тип», иначе я не смог.
Но выход такой же, если я использую тип-параметр не распространяется ключевое слово как:
class First<T>
{
//Same code as above
}
Мои сомнения: Что особенного распространяется ключевое слово, если я могу передать ребенка объект класса к агрегатам() без расширяет ключевое слово?
Спасибо .. Но у меня разные сомнения. Впервые я могу передать любой объект. Но я уже передал объект класса Use для переменной f1. Если - это компилятор типа-параметра, то для данного f1 должен использовать объект Использовать объект не UseChild. Если параметр типа , то оба могут быть разрешены. –
@mynameisGYAN 'UseChild' - это объект, поэтому его можно передать, когда параметр типа« ». Он расширяет 'Use', но' Use' также расширяет 'Object' (все объекты делают). Поэтому косвенно 'UseChild' расширяет' Object', поэтому его можно передать, когда параметр типа ''. –
nhouser9
Может быть, я ошибаюсь, но то, что я получаю, это: First