類定義(課下選作)

類定義(課下選作)

要求

  • Book類包含書名,做者,出版社和出版日期
  • getter,setter
  • 至少三個構造方法,接收並初始化這些數據
  • 覆蓋toString方法,返回良好的含有多行的書的描述信息
  • 覆蓋equals方法,書名,做者,出版社和出版日期徹底一致才說明兩本書是同樣的。
  • 建立一個測試類Bookshelf

設計思路

  • 首先在Book類中定義所須要的變量,構造方法
  • 定義getter,setter方法
    重難點就在於toString,equals方法的重寫,之前在課上測試過
  • toString()方法的重寫,返回重寫的字符串便可。public String toString(){ return str; }
  • Object類中的equals方法:用於檢測一個對象是否等於另一個對象,源碼以下:
public boolean equals(Object obj) {
        return (this == obj);
    }
  • 實際處理中,若要比較兩個對象是否相等,通常須要重寫equals方法
    • 顯示參數命名爲otherObject, 稍後轉化成other變量
    public boolean equals(Object otherObject)
    • 檢測this和otherObject是不是同一個對象的引用,是,返回true;
    if(this==otherObject){
      return true;
    }
    • 檢測otherObject是否爲null, 是, 返回false;
    if(otherObject == null){
      return false;
    }
    • 比較this和otherObject是否屬於同一個類. 若是equals的語義在每一個子類中有所改變,就使用getClass檢測:
    if(getClass() != otherObject.getClass()){
      return false;
    }
    • 若是因此子類語義相同,使用instanceof檢測:
    if(!(otherObject instanceof Employee)){
      return false;
    }
    • 將otherObject轉化爲相對應的類型變量other
    Book bk = (Book)obj
    • 對所須要的比較的數據域進行比較. 若是是基本數據類型,使用a==b比較; 若是是對象比較,調用Objects.equals(a, b)進行比較
  • 當equals()被重寫時,一般有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具備相等的哈希碼。
    • hashcode不相同,用equals()方法判斷的返回的必定爲false。
    • hashcode相同,equals()方法返回值不能確認,可能爲true,可能爲false。
  • getClass方法,得到當前對象的類型,下面的語句,獲得的就是字符串的類型。
Class theClass="hello".getClass();

測試代碼

public class bookShelf {
    public static void main(String[] args) {
        Book b1 = new Book("Java實用教程","耿祥義","清華大學出版社","2017年9月");
        Book b2 = new Book("密碼學","鄭秀林","金城出版社","2016年8月");
        Book b3 = new Book("彙編語言程序設計","錢曉捷","中國工信出版社","2018年6月");
        System.out.println(b1.getBookname());
        System.out.println(b2.getDate());
        System.out.println(b3.getPublisher());
        System.out.println(b1.equals(b2));
        System.out.println(b2.equals(b2));
    }
}

運行結果截圖

碼雲連接

參考

重寫equals方法git

相關文章
相關標籤/搜索