java三個特殊類之Object類

Object類簡介

Object是java默認提供的一個類。Java裏面除了Object類,所有的類都是存在繼承關係的。默認會繼承Object父類。即所有類的對象都可以使用我們的Object進行接受。
範例,使用Object接受所有類的對象

package ObjectTest;
class Person{}
class student{}
public class Test {
    public static void main(String[] args) {
        fun(new Person());
        fun(new student());
    }
    public static void fun(Object obj){
        System.out.println(obj);
    }
}

運行結果:

ObjectTest.Person@1540e19d
ObjectTest.student@677327b6

所以在開發之中,Object類是參數的最高統一類型。但是Object類也存在有定義好的一些方法

Object類裏面的設置好的方法

No 方法名稱 類型 描述
1 public Object() 構造 無參構造爲子類服務
2 public String toString 普通 取得對象信息
3 public boolean equals(Object obj) 普通 對象比較

取得對象信息

在使用對象直接輸出的時候,默認輸出的是一個地址編碼,如果現在使用的是String類,該類對象直接輸出的是內容,主要原因就是toString()方法的問題。
覆寫toString()方法

package ObjectTest;
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 "姓名"+this.name+",年齡"+this.age;
    }
}
public class Test {
    public static void main(String[] args) {
        fun(new Person("lele",25));
        fun("hello");
    }
    public static void fun(Object obj){
        System.out.println(obj.toString());
    }
}

toString()的核心目的在於取得對象信息
String作爲信息輸出的重要數據類型,在java中所有的數據類型只要遇見了String並且執行l“+”,那麼都將要求變爲字符串後鏈接,而所有對象想要變爲字符串就默認使用toString()方法
觀察toString()方法

package ObjectTest;
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 "姓名"+this.name+",年齡"+this.age;
    }
}
public class Test {
    public static void main(String[] args) {
        String msg="hello"+new Person("lele",25);
        System.out.println(msg);
    }
 
}

對象比較

String類對象的比較使用的是equals()方法,實際上String類的equals()方法覆寫Object類中的equals()方法。
實現對象比較

package ObjectTest;
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 "姓名"+this.name+",年齡"+this.age;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj==null)
            return false;
        if(this==null)
            return true;
        //如果obj不是person類的對象
        if(!(obj instanceof Person))
            return false;
        Person person=(Person)obj;//向下轉型,比較屬性值
        return this.name.equals(person.name)&&this.age==person.age;
    }
}
public class Test {
    public static void main(String[] args) {
       Person per1=new Person("lele",18);
       Person per2=new Person("lele",18);
        System.out.println(per1.equals(per2));
    }
   
}

接收引用數據類型

在之前已經分析了Object可以接收任意的對象,因爲Object是所有類的父類,但是Object並不會侷限於此,它可以接收所有的數據類型:包括:類、數組、接口

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

在Object中接收接口

在Object可以接受接口是java中強制要求,因爲接口本身不能繼承任何類
使用Object’接收接口對象

package ObjectTest;
interface IMessage{
    public void getMessage();
}
class MessageImpl implements IMessage{
    @Override
    public String toString() {
        return "pretty";
    }

    @Override
    public void getMessage() {
        System.out.println("lele");
    }
}
public class Test {
    public static void main(String[] args) {
  IMessage msg=new MessageImpl();//子類向父接口轉型
        Object obj=msg;//接口向我們的Object類轉型
        System.out.println(obj);
        IMessage temp=(IMessage) obj;//強制類型轉型
        temp.getMessage();
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章