[英]Polymorphism with Java class
假設我們有一個Employee類,它具有以下數據字段和功能。 該程序嘗試通過比較其name
和address
來查看2名Employees
是否相等
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());
“方法”不知道如何處理這種情況,盡管它是完全有效的,並且在編譯時無法得知(通常情況下)。
為了避免這種情況,在重寫方法時不允許使用這種類型的方差,如果嘗試執行此操作,則會出現編譯錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.