//答案是2,不知道为什么。它是否不调用对象/类实例 //方法,如果方法被覆盖。基本上为什么在Person类中调用compareTo而不是SoccerPlayer,为什么答案是2 ????提前致谢
ampl: model waste.mod;
ampl: data waste.dat;
ampl: solve;
MINOS 5.51: ignoring integrality of 20 variables
MINOS 5.51: optimal solution found.
23 iterations, objective 0
以下代码的结果是什么? //为什么2 ???
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();
}
}
一个。类Person中的语法错误:无法访问other.name
湾SoccerPlayer类中的语法错误:compareTo被重新定义
℃。第***行的ClassCaseException
d。编译没有错误,显示1
即编译没有错误,显示2
答案 0 :(得分:3)
这里没有压倒一切。一个compareTo
方法将Object
作为参数,另一个采用SoccerPlayer
。
那是超载,而不是压倒一切。两个名称相同但方法不同的方法。
由于变量players[0]
的声明类型是Person,所有编译器都知道这个变量是一个Person,只有一个compareTo
方法将Object作为参数。所以这个方法就是被调用的方法。
请注意,这段代码可能会比10年前更好,当时我们使用Java 4,并且不存在泛型。如今,使用原始类型实际上是不好的做法。人员应该实施Comparable<Person>
,而不是Comparable
。
另请注意,equals()实现也是错误的。如果作为参数传递的对象不是Person,它应该返回false而不是抛出ClassCastException。