簡體   English   中英

Java類的多態性

[英]Polymorphism with Java class

假設我們有一個Employee類,它具有以下數據字段和功能。 該程序嘗試通過比較其nameaddress來查看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM