我需要关于在一个期望父亲的方法中传递Child的帮助,我将类Person作为超类,Student和Teacher是该类的子类,所以这里是关于我正在尝试的代码:/
public static void orderByName(ArrayList<Person> pArray){
Collections.sort(pArray, new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
});
}
public static void main(String[] args) {
ArrayList<Student> estudiantes = new ArrayList<Student>();
familiares.add(new Student("1235", "Name2", "SecondName2", "LastParameter2"));
familiares.add(new Student("1234", "Name1", "SecondName1", "LastParameter1"));
orderByName(estudiantes); //Pass an ArrayList of child but expects an ArrayList of father
}
我还需要这个方法和一个教师的ArrayList,所以,当它需要超类型时,是否可以传递一个子类型?谢谢,我希望你能帮助我^ _ ^
答案 0 :(得分:1)
您可以使用
更改签名public static void orderByName(ArrayList<? extends Person> pArray)
答案 1 :(得分:0)
A&#34;学生&#34; ISA &#34; Person&#34;,因此您可以在期望有人时传递学生。
A&#34;人&#34;不一定是&#34;学生&#34;,所以当学生被期待时你不能传递一个人。
通常我们会讨论子类,父类,基类等,或许会读一些关于正确术语的内容。
答案 2 :(得分:0)
简而言之,是的,当它需要超类型时,它可以传递子类型。
教师也是一个人 - 我想你的课程定义是这样的:
public class Teacher extends Person {
因此教师 也是一个人,并且您的方法需要人员(人物)的数组列表,您可以传递教师的数组列表。
您还需要使用?在泛型中扩展Person - 现在不要太担心它,因为你是Java的新手。首先尝试理解子类型/超类型和多态的概念。在你对两者都有很好的理解之后,你应该仔细研究泛型。
只是一个提示:你不应该期待具体类型的ArrayList
public static void orderByName(ArrayList<? extends Person> pArray){ // Dont do that
而是使用其超类型:
public static void orderByName(List<? extends Person> pArray){
同时更改列表分配给变量的位置:
List<Student> estudiantes = new ArrayList<Student>();
不要在其他地方改变:)
这里的区别在于,现在您可以传递任何子类型的列表的任何子类型。