iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Software Development

Java入門的30張門票系列 第 21

[Day21] Object 類別

  • 分享至 

  • xImage
  •  

如果你仔細觀察,你會發現Java的所有類別,全部都是繼承自java.lang.Object類別,如果某一個class沒有繼承任何類別,那麼它就會自動繼承Object,成為Object的子類別。Object可以顯式繼承,也可以隱式繼承,意思是一樣的。

// 顯式繼承
public class ClassName extends Object {...}
// 隱式繼承
public class ClassName {...}

Object常用方法

equal()

用來判斷兩個物件的內容是否相同。若使用str1==str2則是代表兩個物件的記憶體位址是否相同,兩者功用不太一樣,不要搞混啦~

String str1 = new String("Hello");
String str2 = new String("Hello"); 
String str3 = "123";
String str4 = "Hello";
System.out.println(str1.equals(str2));  // true
System.out.println(str3.equals(str4));  // false
System.out.println(str1.equals(str3));  // false
System.out.println(str2.equals(str4));  // true

toString()

我們可以使用toString()方法來獲取對象的字符串表示形式。如果沒有在class中重新定義toString()方法,就會將調用預設的toString()方法,會輸出<fully qualified class name>@<hash code of object in hexadecimal>這個格式的字串。

public class Info {
	String name;
	int age;
	double height;
	double weight;
	Info(String name, int age, double height, double weight){
		this.name = name;
		this.age = age;
		this.height = height;
		this.weight = weight;
	}
	
	public static void main(String[] args) {
		Info info = new Info("nini", 19, 160, 45);
		System.out.println(info);  // Info@73a8dfcc
		System.out.println(info.toString());  // Info@73a8dfcc
	}
}

如果我想要得到Info裡的正確信息,必須在class中覆寫Object類的toString()方法。另外需要確保它被宣告爲public,並且返回類型是String,括號內不接受任何參數。

public String toString() {
	String result = name+", "+age+", "+height+", "+weight;
	return result;
}

再輸出一次就可以得到看得懂的資訊啦~

nini, 19, 160.0, 45.0
nini, 19, 160.0, 45.0

clone()

clone就是克隆嘛,也就是複製出一個一樣但又不能說完全一樣的物件。這個方法是淺拷貝,也就說只會複製原先物件的地址,而不是重新分配一個空間。

由於Object本身並沒有實現Cloneable這個抽象方法,所以如果不覆寫clone方法就直接呼叫clone()會出現CloneNotSupportedException

這邊先寫好一個物件:

public class Info implements Cloneable{
	String name;
	int age;
	double height;
	double weight;
	public Info(String name, int age){
		this.name = name;
		this.age = age;
}

接著就來試著建立並複製這個物件。可以發現如果沒有用clone其實就只是指向同一個物件而已,因為地址都是相同的。

public static void main(String[] args) throws CloneNotSupportedException {
	Info info = new Info("nini", 19);
	Info info2 = info;
	System.out.println(info);   // Info@73a8dfcc
	System.out.println(info2);  // Info@73a8dfcc
}

而底下的程式碼可以發現它們的地址不一樣了,才是真真實實的克隆了一個新的物件。

public static void main(String[] args) throws CloneNotSupportedException {
	Info info = new Info("nini", 19);
	Info info2 = (Info)info.clone();
	System.out.println(info);   // Info@73a8dfcc
	System.out.println(info2);  // Info@1c655221
	}

上一篇
[Day20] 好像靈異小說會出現的詞 - 介面
下一篇
[Day22] 基本型態包裹器 - Wrapper Classes
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言