在Java中一切的關係都是以繼承的關係存在,如果一個類在定義時沒有明確指名繼承那個類,則默認繼承Object類,實際上定義格式如下:

class Person extends Object{}

class Person

Object文件位置可在 api\index.html裡的java.lan:Object看到說明

Object類中的主要方法
序號 方法名稱 類型 描述
1 public Object() 建構 建構方法
2 public boolean equals(Object obj) 普通 物件比較
3 public int hashCode() 普通 取得Hash碼
4 public String toString 普通 物件列印時呼叫

class Demo{    // 定義Demo類別,實際上繼承Object類別
};
public class ObjectDemo{
    public static void main(String args[]){
        Demo d = new Demo() ;    // 產生實體Demo物件
        System.out.println("不加toString()輸出:"+d) ;
        System.out.println("加上toString()輸出:"+d.toString()) ;
    }
};

執行結果:

不加toString()輸出:objectdemo.Demo@6d06d69c
加上toString()輸出:objectdemo.Demo@6d06d69c

從結果可以發現加與不加toString()的輸出結果都是一樣的,也就是說物件輸出時一定會呼叫Object類別中的toString()方法列印內容。

應用stString()方法取得物件內容

class Person{                                                   //定義Person類別
    private String name ;                      // 定義name屬
    private int age ;        // 定義age屬性
    public Person(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public String toString(){                   //覆寫toString()方法
        return "姓名:" + this.name + ";年齡:" + this.age ;
    }
};
public class ObjectDemo{
    public static void main(String args[]){
        Person per = new Person("賴小明",30) ;     // 產生實體Person物件
        System.out.println("物件資訊" + per) ;            //列印物件呼叫toString()方法 
    }
};

★Object類別提供的equals()方法預設是比較地址★

物件的比較操作

class Person{
    private String name ;                   // 定義name屬性 
    private int age ;        // 定義age屬性
    public Person(String name,int age){  //透過建構設定屬性內容
        this.name = name ;          //為name屬性設定值
        this.age = age ;                //為age屬性設定值
    }
    public boolean equals(Object obj){              //覆寫Object類別中的equals()方法
        if(this==obj){          // 如果兩個物件的位址相等,則肯定是同一個物件
            return true ;    //肯定為同一對象
        }
        if(!(obj instanceof Person)){    // 判斷傳進來的物件是否是Person的實例

            return false ;                // 如果不是,則直接傳回false
        }
        Person per = (Person) obj ;    // 將傳進來的物件向下轉型
        if(per.name.equals(this.name)&&per.age == this.age){ //一個一個屬性比較,看是否相等
            return true ;    // 依次比較內容 
        }else{
            return false ;
        }
    }
    public String toString(){                           //覆寫toString()方法
        return "姓名:" + this.name + ";年齡:" + this.age ;
    }
};
public class ObjectDemo{
    public static void main(String args[]){
        Person per1 = new Person("賴小明",30) ;     //實例化Person
        Person per2 = new Person("賴小明",30) ;     // 實例化Person
        System.out.println(per1.equals(per2)?"是同一人" : "不是同一個人") ;
        System.out.println(per1.equals("hello")?"是同一人" : "不是同一人") ;
        
    }
};

Object類別是所有的父類別,所有的物件都可以向Object進行轉換,其中包含陣列和介面類別型,一切的參考資料型態都可以使用Object進行接收。

Object接收介面實例

interface A{
    public String getInfo();                //定義抽象方法
}
class B implements A{                                   //子類別實現介面
    public String getInfo(){                 // 覆寫介面中的抽象方法 
        return "Hello World!!!" ;
    }
};
public class ObjectDemo04{
    public static void main(String args[]){
        A a = new B() ;    // 物件向上轉型,為介面產生實體
        Object obj = a ;    // 使用Object接收,物件向上轉型
        A x = (A)obj ;    // 物件向下轉型
        System.out.println(x.getInfo()) ;
    }
};

執行結果:

Hello World!!!

Object接收陣列

public class ObjectDemo{
    public static void main(String args[]){
        int temp[] = {1,3,5,7,9} ;    //定義陣列
        Object obj = temp ;                     // 使用Object接收陣列
        print(obj) ;                                    //傳遞陣列參考 
    }
    public static void print(Object o){                 //接收一個物件
        if(o instanceof int[]){        // 判斷物件的型態
            int x[] = (int[])o ;            //向下轉型
            for(int i=0;i<x.length;i++){    //迴圈輸出
                System.out.print(x[i] + "\t") ;
            }
        }
    }
};

執行結果:

1    3    5    7    9    

結論:

  1. Object類別是所有類別的父類別,只要引用數據類型都可以使用Object進行接收。
  2. 對象在進行向下轉型之前一定要先發生向上轉型,要使用instanceof關鍵字判斷。
  3. toString():對象輸出時調用。
  4. equals():對象比較時調用。
  5. String類別也是Object類別的子類別。

 

 

arrow
arrow
    文章標籤
    Java
    全站熱搜
    創作者介紹
    創作者 mingyilai 的頭像
    mingyilai

    mingyilai的部落格

    mingyilai 發表在 痞客邦 留言(0) 人氣()