【发布时间】:2019-07-06 15:47:31
【问题描述】:
所以我有下面的测试代码实现
class Employee{
String name;
int age;
@Override
public boolean equals(Object obj) return false;
public boolean equals(Employee obj) return true;
}
在主要方法中,我有以下代码
public static void main(String[] args) {
Object E1 = new Employee();
Employee E2 = new Employee();
System.out.println(E1.equals(E2));
}
所以根据我的理解,多态性应该将 E1 与方法 equals(Employee obj) 绑定,因为我传递的是 Employee 类型的对象,而 E1 实例也是 Employee 类型(尽管对 Object 底层实例的引用是 Employee 类型)。
但是,我看到它打印为 false,这意味着 equals(Object obj) 已被调用(已在两个 equals 方法中使用 Sysout 语句进行了验证)。
【问题讨论】:
-
在编译时解析要调用的重载方法,具体取决于参数的声明类型和接收者。由于 E1 的声明类型为 Object,因此唯一可能调用的方法是 equals(Object)(因为 Object 没有任何其他 equals() 方法)。然后多态在运行时调用 Employee 类中的实现而不是 Object 类中的实现。我确定有几十个重复,这就是我没有回答的原因。
-
“行为”是怎样的,它看起来像它工作,直到你在任何实际依赖于合同的地方使用它,然后它就坏了。
标签: java polymorphism overloading