1. 程式人生 > >Java學習——Object類

Java學習——Object類

Object類

Object類是jdk預設提供的一個類,Java中除了Object類,所有類都存在繼承關係,預設會繼承Object父類。即所有類都是Object類的子類。

Object展現了最高的引數統一化——所有類的物件都可以使用Object進行接收。

一、Object類中兩個重要的方法

1.toString()——取得物件資訊

class Test{
    public static void main(String[] args) {
        fun(new Person("張三",25) );
    }
    public static void fun(Object obj) {
        System.out.println(obj.toString()); 
    }
}
class Person{
    private String name ;
    private int age;
    public Person(String name,int age){
       this.name = name;
       this.age = age;
    }
}//輸出 
[email protected]

通過以上程式碼發現,Object類中的toString()方法只是簡單輸出當前所引用的類名稱以及物件地址。(而這是所有物件都共同具備的特徵)。如若覺得預設給出的toString()方法功能不足,就在需要的子類上覆寫toString()方法。

class Test{
    public static void main(String[] args) {
        fun(new Person("張三",25) );
    }
    public static void fun(Object obj) {
        System.out.println(obj.toString()); 
    }
}
class Person{
    private String name ;
    private int age;
    public Person(String name,int age){
       this.name = name;
       this.age = age;
    }
    @Override
    public String toString(){
        return "姓名:"+name + "  年齡:"+age;
    }
}//輸出 姓名:張三  年齡:25

 

2.equlas()——物件比較

class Test{
    public static void main(String[] args) {
        Person per1 = new Person("張三",20);
        Person per2 = new Person("張三",20);
        System.out.println(per1.equals(per2));
    }
}
class Person{
    private String name;
    private int age;
    public Person(String name,int age){
        this.age = age;
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        //1.首先判斷obj是否是Person類物件
        if(!(obj instanceof Person)){
            return false;
        }
        //2.判斷當前物件是否和傳入物件地址相同
        if(this == obj){
            return true;
        }
        //3.obj確實是Person類物件,比較兩者屬性內容
        //向下轉型取得Person的屬性值
        Person per = (Person) obj;
        return ((this.name.equals(per.name) && this.age == per.age));
    }
}

二、接收引用資料型別

在之前已經分析了Object可以接收任意的物件,因為Object是所有類的父類,但是Obejct並不侷限於此,它可以接
收所有資料型別,包括:類、陣列、介面。

使用Object來接受陣列物件:

public class Test {
    public static void main(String[] args) {
        // Object接收陣列物件,向上轉型
        Object obj = new int[]{1,2,3,4,5,6} ;
        // 向下轉型,需要強轉
        int[] data = (int[]) obj ;
        for(int i :data){
            System.out.println(i+"、");
        }
    }
}

使用Object接收介面物件:

interface IMessage {
    void getMessage();
}
class MessageImpl implements IMessage {
    @Override
    public String toString() {
        return "Hello" ;
    }
    @Override
    public void getMessage() {
        System.out.println("World");
    }
}
public class Test {
    public static void main(String[] args) {
        IMessage msg = new MessageImpl(); // 子類向父介面轉型
        Object obj = msg; // 介面向Obejct轉型
        System.out.println(obj);
        IMessage temp = (IMessage) obj; // 強制型別轉換
        temp.getMessage();
    }
}

Object真正達到了引數的統一,如果一個類希望接收所有的資料型別,就是用Object完成。