【发布时间】:2020-12-20 18:11:02
【问题描述】:
我有一个扩展 Person 类的 Student 类。我的超类中没有 equals 方法,只有我的子类中的两个,如图所示。我试图了解我的第二个、第三个和第四个打印语句的运行时行为。语句 1 调用了接受 student 参数的 equals 方法,这很有意义,因为被比较的两个对象都声明为 Student 类型。但是,语句 2 调用了接受 person 参数的 equals 方法,而最后 2 个语句调用了 Object 类中的 equals 方法。有人可以解释为什么当 Java 是动态类型的并且实际运行时对象始终是 Student 时会出现这种情况。如有任何错误,请提前道歉!我是新来的,也是 Java 新手。我不太关心每个方法的输出,只是调用了哪个方法以及为什么。
public boolean equals(Student s) {
System.out.println("inside student equals");
return true;
}
public boolean equals(Person p) {
System.out.println("inside person equals");
return false;
}
public static void main(String[] args) {
Student s1 = new Student("John", "1", 10, 1.0, 10);
Student s2 = new Student("John", "1", 10, 1.0, 10);
Person s3 = new Student("John", "1", 10, 1.0, 10);
Person s4 = new Student("John", "1", 10, 1.0, 10);
System.out.println(s1.equals(s2)); // 1
System.out.println(s1.equals(s3)); // 2
System.out.println(s3.equals(s4)); // 3
System.out.println(s3.equals(s1)); // 4
}
输出:
inside student equals
true
inside person equals
false
false
false
【问题讨论】:
-
请发送文本,而不是文本图像。当它是图像时,很难测试您的代码并对其进行编辑。
-
我不知道怎么做? :\
-
@Steve 我现在做
-
@Progman 确实如此,部分!我仍在尝试找出为什么在语句 3 和 4 中调用对象类中的等号而不是学生类中的两个中的一个
标签: java overriding overloading