Java 被答案的对比弄糊涂了

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()

//答案是不确定为什么。它不调用对象/类实例吗 //方法,如果该方法被重写。基本上,为什么它在Person类中调用compareTo而不是SoccerPlayer,为什么答案是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();
    }
}
以下代码的结果是什么//为什么是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。

这两个答案都是错误的,因为它们使用原始类型。感谢您的快速回复,我理解!