你没理解我意思啊 我写的是Manager 是 Employee的子类 但在 Pair<Employee> result = new Pair<Employee>();里,我把Employee换成Manager Pair<Manager> result = new Pair<Manager>(); 也没有任何问题,不是应该只能用Employee的么,为什么用Manger自己本身也可以啊
你理解下面这个,你就清楚了。Employee ceo = new Manager("Gus Greedy", 800000, 2003, 12, 15);
.....
}
但在
Pair<Employee> result = new Pair<Employee>();里,我把Employee换成Manager
Pair<Manager> result = new Pair<Manager>();
也没有任何问题,不是应该只能用Employee的么,为什么用Manger自己本身也可以啊
以List举例:
List<? super Child> list通常是用来往里面放东西,由于具体类型可能是Child或者某一个Child的父类型(Parent, GrandParent, ... Object),所以必定能够得出这样结论list.add(new Child());(至少在语法上)是合法,安全的。
List<? extends Parent> list通常是从中读取,由于具体类型可能是Parent或者任何一个它的子类型(Child或者GrandChild...),所以必定能够得出这样的结论:Parent x = list.get(0);(至少在语法上)是合法,安全的。
后面的参数的 Manager的父类 也就是Employee 。
如果调整一下这样方法定义,可以是:public static void maxminBonus(Manager[] a, Pair<Employee > result)而我说的Employee ceo = new Manager("Gus Greedy", 800000, 2003, 12, 15)
定义的对象ceo类型为Employee,所以这样是可以作为参数调用maxminBonus方法。
而实际new的为Manager,所以ceo的实际类型为Manager。而ceo是可以作为参数调用maxminBonus方法。
因此一个Manager的对象是可以作为参数调用maxminBonus方法的,所以你上面的都没问题。
后面的参数的 Manager的父类 也就是Employee 。
如果调整一下这样方法定义,可以是:public static void maxminBonus(Manager[] a, Pair<Employee > result)而我说的Employee ceo = new Manager("Gus Greedy", 800000, 2003, 12, 15)
定义的对象ceo类型为Employee,所以这样是可以作为参数调用maxminBonus方法。
而实际new的为Manager,所以ceo的实际类型为Manager。而ceo是可以作为参数调用maxminBonus方法。
因此一个Manager的对象是可以作为参数调用maxminBonus方法的,所以你上面的都没问题。
我明白你的意思了,不过感觉你只是讲出了结果,并没有讲为什么会这样,我觉得10楼的兄弟讲出了原因。