1. 程式人生 > 實用技巧 >Object類的概念和構造方法

Object類的概念和構造方法

Object類的概述(重點)

基本概念

java.lang.Object類是Java語言中類層次結構的根類,也就是說任何一個類都是該類的直接或者間
接子類。
如果定義一個Java類時沒有使用extends關鍵字宣告其父類,則其父類為 java.lang.Object 類。
Object類定義了“物件”的基本行為, 被子類預設繼承。

常用的方法

案例題目:

  程式設計實現Student類的封裝,特徵:學號(id)和姓名,要求提供列印所有特徵的方法。
  程式設計實現StudentTest類,在main方法中使用有參方式構造兩個Student型別的物件並列印特徵。

package com.lagou.task11;

public class Student extends Object { private int id; // 用於描述學號的成員變數 private String name; //用於描述姓名的成員變數 public Student() { } public Student(int id, String name) { setId(id); setName(name); } public int getId() { return id; } public void setId(int
id) { if(id > 0) { this.id = id; }else{ System.out.println("學號不合理哦!"); } } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.lagou.task11;

public class
StudentTest { public static void main(String[] args) { //1.使用有參方式構造Student型別的兩個物件並判斷是否相等 Student s1 = new Student(01,"張飛"); Student s2 = new Student(02,"劉備"); // 下面呼叫從Object類中繼承下來的equals方法,該方法預設比較兩個物件的地址 Boolean b1 = s1.equals(s2); System.out.println("b1 = " + b1);
    
System.out.println(s2 == s1);
} }

如下圖S1和S2指向不同的堆區地址,所以使用equals方法比較得到的結果是false

equals方法和==比較的結果是一樣的,所以得到的結果是false

如果S2和S1都指向同一個物件,地址就相同了,得到的結果是true

題目擴充套件:

  如何實現以姓名作為基準判斷兩個物件是否相等?以及以學號和姓名同時作為基準判斷兩個物件是
否相等?

package com.lagou.task11;

public class Student extends Object {
    private int id; // 用於描述學號的成員變數
    private String name; //用於描述姓名的成員變數

    public Student() {
    }

    public Student(int id, String name) {
        setId(id);
        setName(name);
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        if(id > 0) {
            this.id = id;
        }else{
            System.out.println("學號不合理哦!");
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /*
    *  為了比較兩個物件的內容,也就是學號資訊需要重寫該方法
    * Student this = s1
    * Object obj = s2
    * s2是父類型別的引用指向子類型別的物件,需要強制轉換
    * 前面我們講過只要做強制型別轉換的時候都要用到instanceof確認一下obj真正指向的物件是不是student
    */
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Student) {
            Student ts = (Student) obj;
            return this.getId() == ts.getId();
        }
        // 否則型別不一致沒有可比性,則內容不一定相同
        return false;
    }
}

equals方法預設比較地址,我們改寫以後的equals方法比較的是學號,而==比較的還是地址。所以最後得到的結果是true 、false。