Java學習筆記18(Object類),學習筆記object
Object類是Java中最頂層的父類,所有類都是它的子類,介面不繼承它
Object類中的方法:
官方資料:boolean equals(Object obj) 指示其他某個對象是否與此對象“相等”
樣本:
package demo;public class Person extends Object { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } // 重寫父類的equals方法 // 原始碼相同,equals是比較兩個對象的記憶體位址 public boolean equals(Object obj) { return this == obj; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
package demo;public class TestEquals { public static void main(String[] args) { //Person類繼承了Object類,繼承了父類的方法 Person p1 = new Person("張三", 18); Person p2 = new Person("李四", 20); boolean b1 = p1.equals(p2); System.out.println(b1);//輸出false p1 = p2; boolean b2 = p1.equals(p2); System.out.println(b2);//輸出true }}
不過發現比較記憶體位址是沒有意義的,為了滿足一些需求,我們可以重寫下equals方法:
package demo;public class Person extends Object { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } // 重寫父類的equals方法,自己定義比較方式 // 比較兩個對象的age是否相同 public boolean equals(Object obj) { // 處理傳入的是本身的情況 if (this == obj) { return true; } // 處理傳入空的情況 if (obj == null) { return false; } // 多態中不能調用子類的特性,所以需要向下轉型 // 加入instanceof為了防止風險,因為Object是頂層父類,防止傳入其他的類 if (obj instanceof Person) { Person p = (Person) obj; return this.age == p.age; } else { return false; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
package demo;public class TestEquals { public static void main(String[] args) { //Person類繼承了Object類,繼承了父類的方法 Person p1 = new Person("張三", 20); Person p2 = new Person("李四", 20); boolean b1 = p1.equals(p2); System.out.println(b1);//輸出true }}
toString方法:
官方資料:String toString() 返回該對象的字串表示
繼續上邊的Person類寫個樣本:
package demo;public class TestToString { public static void main(String[] args) { Person p1 = new Person("張三", 18); String s1 = p1.toString(); System.out.println(s1); System.out.println(p1); }}/*這裡兩個輸出相同:demo.Person@2cdb03a1demo.Person@2cdb03a1所以我們發現,輸入語句中如果寫的是一個對象,預設調用對象的toString方法*/
其實得到記憶體位址沒有什麼實際意義,為了滿足一些需求,所以我們重寫下toString方法:
package demo;public class Person extends Object { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } //重寫父類的toString方法 public String toString(){ return this.name+this.age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
package demo;public class TestToString { public static void main(String[] args) { Person p1 = new Person("張三", 18); String s1 = p1.toString(); System.out.println(s1); System.out.println(p1); }}/*這裡兩個輸出總是相同:張三18張三18我們發現,輸入語句中如果寫的是一個對象,總是預設調用對象的toString方法*/
Object還有其他方法,有些不常用,有些會在後邊提到