Java 被答案的对比弄糊涂了
//答案是不确定为什么。它不调用对象/类实例吗 //方法,如果该方法被重写。基本上,为什么它在Person类中调用compareTo而不是SoccerPlayer,为什么答案是2????提前谢谢Java 被答案的对比弄糊涂了,java,inheritance,compareto,Java,Inheritance,Compareto,//答案是不确定为什么。它不调用对象/类实例吗 //方法,如果该方法被重写。基本上,为什么它在Person类中调用compareTo而不是SoccerPlayer,为什么答案是2????提前谢谢 public class Person implements Comparable { private String name; public Person(String name) { this.name = name; } public String getName()
public class Person implements Comparable {
private String name;
public Person(String name) { this.name = name; }
public String getName() { return name; }
public boolean equals(Object other) {
return other != null && name.equals(((Person) other).name);
}
public int compareTo(Object other) {
return name.compareTo((Person other).name);
}
public int hashCode() { return name.hashCode(); }
}
public class SoccerPlayer extends Person {
private int numGoals;
public SoccerPlayer(String name, int n) {
super(name);
numGoals = n;
}
public int getNumGoals() { return numGoals; }
public void score() [ numGoals++; }
public int compareTo(SoccerPlayer other) {
return getNumGoals() - other.getNumGoals();
}
public String toString() {
return getName() + "/" + getNumGoals();
}
}
以下代码的结果是什么//为什么是2
Person players[] = { new SoccerPlayer("Mia Hamm", 7), new SoccerPlayer("Kristine Lilly", 6) };
System.out.println(players[0].compareTo((SoccerPlayer) players[1])); // Line ***
a。类Person中的语法错误:other.name不可访问
b。SoccerPlayer类中的语法错误:compareTo被重新定义
c。ClassCaseException在线***
d。编译时没有错误,显示1
e。编译时没有错误,显示2此处没有覆盖。一个
compareTo
方法采用对象作为参数,另一个采用SoccerPlayer
这是重载,而不是重写。具有相同名称但签名不相同的两个方法
由于变量players[0]
的声明类型是Person,因此编译器只知道该变量是Person,并使用一个compare to
方法将对象作为参数。所以这个方法就是被调用的方法
请注意,这段代码在十多年前还不错,当时我们使用Java4,泛型还不存在。如今,使用原始类型是非常糟糕的做法。人员应执行可比
,而不是可比
还要注意,equals()实现也是错误的。如果作为参数传递的对象不是个人,则应返回false而不是抛出ClassCastException。这两个答案都是错误的,因为它们使用原始类型。感谢您的快速回复,我理解!