Java學習筆記二十四:Java中的Object類
Java中的Object類
一:什麽是Object類;
Object類是所有類的父類,相當於所有類的老祖宗,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麽這個類默認繼承Object類。
Object類中的方法,適合所有子類。
二:toString()方法;
在OBject類裏面定義toString()方法的時候返回的對象的哈希code碼(對象地址字符串)。
如果我們在代碼裏直接輸出一個對象,你會發現它輸出的這個對象在內存中的地址,我們把它稱為哈希碼,它是通過哈希算法生成的一個字符串,是用來唯一區分對象的,可以想象為身份證號。
可以通過重寫toString()方法表示出對象的屬性
舉一個例子:
Initail主函數:
package com.test; public class Initail { public static void main(String[]args){ Dog dog = new Dog();//這裏我們定義了一個dog對象 System.out.println(dog);//我們如果現在輸入dog的值 } }
Dog類:
package com.test; //Dog對象繼承於Animal類 public class Dog extends Animal{ public intage = 20; public void eat(){ System.out.println("狗有吃骨頭的能力"); } public Dog(){ System.out.println("Dog類執行了"); } public void method(){ eat(); } }
Animal類:
package com.test; //Animal類並沒有明確表明它繼承於那個類,他就相當於繼承了Object類 public class Animal extends Object{ publicint age=10;//為屬性賦初值 public String name; public void eat(){ System.out.println("動物是可以吃東西的"); } public Animal(){ System.out.println("Animal類執行了"); } }
運行結果為:
此時我們看到它輸出的是dog類的包名+dog對象在內存中的地址
重寫從父類繼承來的toString)方法:
在Eclipse中的source下選擇選項
確認即可完成
修改後的Dog類:
package com.test; //Dog對象繼承於Animal類 public class Dog extends Animal{ public int age = 20; public void eat(){ System.out.println("狗有吃骨頭的能力"); } public Dog(){ System.out.println("Dog類執行了"); } @Override public String toString() { return "Dog [age=" + age + "]"; } public void method(){ eat(); } }
運行結果為:
此時便輸出了對象屬性的值。
三:equals()方法;
equals()方法比較的是對象的引用是否指向同一塊內存地址
Dog dog = new Dog();
這個dog對象並不是我們創建的對象,而是對象在內存中的地址,在操作對象的地址的時候相當於間接操作了對象的值。這個dog就是引用。
一般情況下比較兩個對象時比較他的值是否一致,所以要進行重寫。
舉一個例子:
主函數Initail:
package com.test; public class Initail { public static void main(String[]args){ Dog dog = new Dog();//這裏我們定義了一個dog對象 dog.age = 15; Dog dog2 = new Dog();//繼續創建一個dog對象 dog2.age = 15; //比較兩個對象是否符合equals if(dog.equals(dog2)){ System.out.println("兩個對象是相同的"); } else{ System.out.println("兩個對象是不相同的"); } } }
運行結果為:
雖然我們賦給對象的值是相同的,但是new兩個對象其實是開辟了兩個不同的內存空間,因為equals對比兩個內存地址是否相同,所以兩個對象不同。
重寫方法:
我們選擇eclipse的source下的選項
Initail類:
package com.test; public class Initail { public static void main(String[]args){ Dog dog = new Dog();//這裏我們定義了一個dog對象 dog.age = 15; Dog dog2 = new Dog();//繼續創建一個dog對象 dog2.age = 15; //比較兩個對象是否符合equals if(dog.equals(dog2)){ System.out.println("兩個對象是相同的"); } else{ System.out.println("兩個對象是不相同的"); } } }
Dog類:
package com.test; //Dog對象繼承於Animal類 public class Dog extends Animal{ public int age = 20; public void eat(){ System.out.println("狗有吃骨頭的能力"); } public Dog(){ System.out.println("Dog類執行了"); } @Override public String toString() { return "Dog [age=" + age + "]"; } public void method(){ eat(); } @Override public boolean equals(Object obj) { if (this == obj)//判斷兩個引用的值是否相同 return true; if (obj == null) return false; if (getClass() != obj.getClass())//判斷兩個對象的類型是否相同 return false; Dog other = (Dog) obj; if (age != other.age)//兩個屬性的屬性值是否相同 return false; return true; } }
其中:getClass()方法比較兩個類對象是否相同,類對象和類的對象的關註點如下
運行結果為:
Java學習筆記二十四:Java中的Object類