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();
}
}