Object類是所有類的父類,如果一個類沒有明確的繼承自另外一個類,則肯定繼承Object類。
class Demo{}
等價於以下的代碼:
class Demo extends Object{} |
那麼既然Object類是所有類的父類,那麼就意味着,所有類的對象都可以使用Object接收。
那麼在開發中,如果要想編寫一個完整的類,應該最少覆寫Object類中的以下幾個方法:
· toString:public Sting toString(),對象打印的時候默認調用
· equals:public boolean equals(Object obj),對象比較
· hashCode:public int hashCode()
1、 toString()方法是在對象打印的時候默認調用的
class Person{
};
public class Demo13{
public static void main(String artgs[]){
Person p = new Person() ;
System.out.println(p) ;
}
}; |
以上程序打印的結果爲:
Person@757aef |
如果在以上打印的時候把打印語句編寫爲:“System.out.println(p.toString()) ;”,則效果與之前是一樣的,那就證明,在打印對象的時候實際上調用toString()方法,是默認調用的。此方法爲Object。
如果現在在Person類中覆寫了toString()方法:
class Person{
public String toString(){
return "HELLO WORLD!!!" ;
}
};
public class Demo13{
public static void main(String artgs[]){
Person p = new Person() ;
System.out.println(p) ;
}
}; |
則打印結果爲:
HELLO WORLD!!! |
實際上可以在toString()中編寫更多的輸出內容,如:以下代碼:
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:"+this.name+",年齡:"+this.age ;
}
};
public class Demo13{
public static void main(String artgs[]){
Person p = new Person("張三",30) ;
System.out.println(p) ;
}
}; |
2、 equals:對象比較
是對象比較的方法,String是Object的子類,所以Strin本身已經根據自己的情況覆寫好了equals方法了。
之前講解過?如何區分兩個對象是否一樣?實際上這樣的方法,應該寫在equals之中。
class Person{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public boolean equals(Object obj){
if(this==obj){
return true ;
}
if(!(obj instanceof Person)){
return false ;
}
Person p = (Person)obj ;
if(this.name.equals(p.name)&&this.age==p.age){
return true ;
}else{
return false ;
}
}
public String toString(){
return "姓名:"+this.name+",年齡:"+this.age ;
}
};
public class Demo14{
public static void main(String artgs[]){
Person p1 = new Person("張三",30) ;
Person p2 = new Person("張三",30) ;
System.out.println(p1.equals(p2)) ;
}
}; |