1. 程式人生 > >java中Object類的使用理解

java中Object類的使用理解

Object類的概述

  • A:Object類概述
    • 類層次結構的根類
    • 所有類都直接或者間接的繼承自該類
  • B:構造方法
    • public Object()
    • 回想面向物件中為什麼說:
    • 子類的構造方法預設訪問的是父類的無參構造方法

1.1 Object類的hashCode()方法

  • A:案例演示
    • public int hashCode()
    • a:返回該物件的雜湊碼值。預設情況下,該方法會根據物件的地址來計算。
    • b:不同物件的,hashCode()一般來說不會相同。但是,同一個物件的hashCode()值肯定相同。

1.2 Object類的getClass()方法

  • A:案例演示
    • public final Class getClass()
    • a:返回此 Object 的執行時類。
    • b:可以通過Class類中的一個方法,獲取物件的真實類的全名稱。
      • public String getName()

1.3 Object類的toString()方法

  • A:案例演示
    • public String toString()
    • a:返回該物件的字串表示。
  •   public Stirng toString() {
      	return name + "," + age;
      }
    
    • b:它的值等於:
      • getClass().getName() + “@” + Integer.toHexString(hashCode())
    • c:由於預設情況下的資料對我們來說沒有意義,一般建議重寫該方法。
  • B:最終版
    • 自動重寫 Alt + Shift +S 再加 V

1.4 Object類的equals()方法

  • A:案例演示
    • a:指示其他某個物件是否與此物件“相等”。
    • b:預設情況下比較的是物件的引用是否相同。
    • c:由於比較物件的引用沒有意義,一般建議手動重寫該方法。 因為在開發中,我們通常比較的是物件中的屬性值,我們認為相同屬性,是同一個物件
    • d:手動重寫時,向上轉型了。想使用子類屬性要先向下轉型。 基本資料型別用==比較, 引用資料型別String用equals比較
 @Override	//重寫equals方法,所以形參obj不能改變		this相當於s1, s相當於s2
public boolean equals(Object obj) {	//向上轉型
	//s1.equals(s2); 	s1呼叫equals,s2傳給obj		s2=new Student()相當於Object obj = new Student(); 	
	//構成了父類引用指向子類物件,多型,(向上轉型了),多型弊端:無法訪問子類特有的屬性name  (obj.name)
	//所以想要使用子類特有的屬性和行為,比如name,需要向下轉型
	Student s = (Student)obj;			//向下轉型
	return this.name.equals(s.name)	 && this.age==s.age;	//前面String型別要轉型,後面int基本資料型別用==
  • B:==號和equals方法的區別
    • ==是一個比較運算子號,既可以比較基本資料型別,也可以比較引用資料型別,基本資料型別比較的是值,引用資料型別比較的是地址值
    • equals方法是一個方法,只能比較引用資料型別,所有的物件都會繼承Object類中的方法,如果沒有重寫Object類中的equals方法,equals方法和==號比較引用資料型別無區別,重寫後的equals方法比較的是物件中的屬性