java中Object類的使用理解
阿新 • • 發佈:2018-12-14
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:它的值等於:
- 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方法比較的是物件中的屬性