我需要关于在方法[Java]中将孩子作为父亲传递的帮助
我需要帮助以一种期望有父亲的方法传递一个孩子,我将类Person作为超类,学生和教师是该类的子类,因此下面是一个关于我尝试的代码:/我需要关于在方法[Java]中将孩子作为父亲传递的帮助,java,inheritance,parameters,Java,Inheritance,Parameters,我需要帮助以一种期望有父亲的方法传递一个孩子,我将类Person作为超类,学生和教师是该类的子类,因此下面是一个关于我尝试的代码:/ public static void orderByName(ArrayList<Person> pArray){ Collections.sort(pArray, new Comparator<Person>(){ @Override public int compare(Person o1, Pe
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
}
我还需要这个方法和一个教师数组列表,所以,当子类型需要超类型时,是否可以传递它?谢谢我希望你能帮我一个学生就是一个人,所以你可以在需要的时候通过一个学生
一个人不一定是一个学生,所以当你期望一个学生时,你不能通过一个人
通常我们谈论子类、父类、基类等,也许可以多读一点正确的术语。您可以使用
public static void orderByName(ArrayList<? extends Person> pArray)
简而言之,是的,当子类型需要超类型时,可以传递它 老师也是一个人——我想你的班级定义是这样的:
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>();
不要在其他任何地方更改:
这里的区别是,现在您可以传递任何子类型的人的列表的任何子类型 感谢您的回复,当我给OrderByNamesStudients打电话时,我对Java有了新的认识;,我得到一个错误,它说类型主体中的orderByNameArrayList方法不适用于ArrayList参数:当我使用ArrayList时,这个建议实际上很好。当您声明集合或诸如此类的东西时,或者当您将其作为argumennt传递时,最好使用抽象类型作为接口。将ArrayList更改为在声明和参数列表中同时列出,它将起作用。让实例化部分保持原样。@nanokuro您应该只更改方法和创建对象列表的位置estudiantes=new ArrayList;你不能在其他任何地方改变。对不起,我误导了你。我已经更新了我的回复。