【发布时间】:2021-05-04 22:31:22
【问题描述】:
这是上下文:
有 2 个类:Person 和 Student extends Person
类 Person 有 1 个方法:
print(Person x) {System.out.println("Person")}(1)
class Student 有两种方法:
print(Student x) {System.out.println("Student")} (2)
和
print(Person x) {System.out.println("Override")} (3)
那么我有:
Person p = new Student();
Student s = new Student();
p.print(s); // prints 'Override' (*)
我从讲座中得到的解释是:因为声明类型是Person,所以编译器会选择方法(1)。但是运行时类型是Student,所以方法(3)覆盖了它。
我的问题是:为什么方法 (2) 没有覆盖?这里的参数类型是 Student(从 (*) 行开始),方法 (2) 应该是最重要的吗?
非常感谢你们。感谢您的所有回答??????
【问题讨论】:
-
这里有两件事在起作用:覆盖和重载。阅读两者之间的相似之处和不同之处将为您解决问题。
-
@SergeyKalinichenko 我第一次听到“重载”这个词:o 非常感谢,我会搜索它
标签: java inheritance methods overriding runtime-type