gpt4 book ai didi

java - Java 类的多态性

转载 作者:行者123 更新时间:2023-12-01 17:28:52 24 4
gpt4 key购买 nike

假设我们有一个 Employee 类,具有以下数据字段和函数。该程序尝试通过比较 2 个员工姓名地址

来判断他们是否相等。
public class Employee{
private String name;
private double hours;
private double rate;
private Address address;
@Override
public boolean equals(Object obj){
if(obj == this) return true;
if(obj == null) return false;
if(this.getClass() == obj.getClass()){
Employee other = (Employee) obj;
return name.equals(other.name) && address.equals(other.address);
}else{
return false;
}
}

为什么我们不这样做,而是使用public boolean equals(Employee obj)(不同的参数)?

最佳答案

(1) 如果你执行 new Empolyee().equals(null) - 这就会发生。

(2) 因为 Object 类声明了 equals(Object) - 并且您不能将 Employee 作为参数来覆盖它方法。您只能在重写方法时扩大参数,而不能缩小参数。
如果您这样做会发生什么:

Object o = new Employee();
o.equals(new Object());

“方法”将不知道如何处理这种情况,尽管它完全有效并且在编译时无法得知(在一般情况下)。

为了避免这种情况,重写方法时不允许出现这种类型的差异,如果尝试这样做,您将收到编译错误。

关于java - Java 类的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com