Object類的概念和構造方法
阿新 • • 發佈:2020-10-12
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(intid) { 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 classStudentTest { 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。