Java —— Object類
阿新 • • 發佈:2018-11-27
-
Object是Java預設提供的類
- Java除了Object類,所有的類都存在繼承關係,預設會繼承Object父類,所有類物件都可以通過Object類進行接收。
1.取得物件資訊——toString( )
- 直接使用物件輸出,預設輸出一個地址編碼;如果輸出的是String物件,此時輸出字串內容而非地址。
原因:String類覆寫了Object的toString( )方法
- 系統輸出預設會呼叫物件的toString( )
- 如果預設給出的toString( )功能不足(想要輸出本類資訊),需要在子類中覆寫toString( )方法。
程式碼示例:
public class ObjectTest1 { public static void main(String[] args) { fun(new Person("張三",25)); //覆寫前:[email protected] 覆寫後:姓名:張三 年齡:25 fun("hello"); //hello } public static void fun(Object obj) { System.out.println(obj.toString()); //等同於下行程式碼 System.out.println(obj); } } class Person { private String name; private int age; public Person(String name,int age){ this.name = name; this.age = age; } //覆寫toString() public String toString() { //大量拼接字串-> StringBuffer/StringBuilder return "姓名:"+this.name+" 年齡:"+this.age; } }
2.物件比較——equals( )
String類的equals( )方法就是覆寫的Object類中的equals( )方法。
- 要比較一個類中兩個物件的屬性,覆寫equals( )
- 先判斷obj是否是該類的例項(是->2)
- 再判斷是否是與自己比較(是->3)
- 向下轉型,取得屬性並比較
equals()覆寫
程式碼示例:
public class ObjectTest2 { public static void main(String[] args) { Person per1=new Person("李四",20); Person per2=new Person("李四",20); System.out.println(per1.equals(per2)); //true System.out.println(per1.equals(new ObjectTest2())); //false } } class Person { private String name; private int age; public Person(String name,int age){ this.name = name; this.age = age; } //如果不覆寫equals則原equals(Object obj) 返回(this == obj) //相當於per1==per2 public boolean equals(Object obj) { if(obj==null){ return false; } //obj是自己(地址) if(obj==this){ return true; } //判斷obj是否是Person的例項 if (!(obj instanceof Person)) { return false; } //同一個類的不同物件(內容) //因為Object類沒有name、age屬性 //向下轉型,取得Person類的name、age的屬性 Person per = (Person) obj; //分別比較name,age return per.name.equals(this.name)&&(per.age==this.age); } }
3.接收引用資料型別
Object類可以接收Java所有資料型別的物件,包括:類、陣列、介面。
- 類和介面等級相同,兩者之間不可繼承/實現,但是Java中的強制要求Object可以接收介面。
- 包裝型別—引用資料型別
程式碼示例:
public class ObjectTest3 {
public static void main(String[] args) {
//Object接收陣列物件
Object obj = new int[]{1,3,5,7,9};
//向下轉型,需強轉
int[] data = (int[]) obj;
System.out.println(data[0]); //1
//Object接收介面物件
IMessage msg = new MessageImpl();
Object obj1 = msg;
((IMessage) obj1).test(); //bonjour!
System.out.println(obj1); //預設呼叫to.String() //[email protected]
}
}
interface IMessage{
void test();
}
class MessageImpl implements IMessage{
@Override
public void test() {
System.out.println("bonjour!");
}
}