Object類在JAVA裏面是一個比較特殊的類,JAVA只支持單繼承,子類只能從一個父類來繼承,若是父類又是從另一個父類繼承過來,那他也只能有一個父類,父類再有父類,那也只能有一個,JAVA爲了組織這個類組織得比較方便,它提供了一個最根上的類,至關於全部的類都是從這個類繼承,這個類就叫Object。因此Object類是全部JAVA類的根基類,是全部JAVA類的老祖宗。全部的類,無論是誰,都是從它繼承下來的。編碼
一個字符串和另一種類型鏈接的時候,另一種類型會自動轉換成String類型,而後再和字符串鏈接。基礎的數據類型int,float,double轉換成字符串比較簡單,按照它們的數字轉換過來就成了,能夠引用類型呢,Person p = new Person();一個字符串加上這個p,你就不知道要怎麼把這個p轉換成字符串了,由於這個p是一個引用類型。spa
1 package cn.galc.test; 2 3 public class TestToString { 4 5 public static void main(String[] args) { 6 Dog d = new Dog(); 7 /** 8 * 若是沒有重寫toString方法,那麼輸出來的默認的字符串內容是「類名+哈希編碼」, 9 * 如:dog=cn.galc.test.Dog@150bd4d 10 * 這裏的d就是一個引用類型,打印的時候,這個引用類型d會自動調用toString()方法將本身轉換成字符串而後再與字符串」d:=」相連, 11 * 而後一塊兒被打印出來。d爲何能夠自動調用toString()方法呢,Dog類裏面也沒有聲明這個toString()方法。 12 * 這是由於toString()方法是Object類裏面的方法,而全部的類都是從Object類繼承下來的, 13 * Dog類固然也不例外,因此Dog類繼承了Object類裏面的toString()方法, 14 * 因此Dog類的對象固然能夠直接調用toString()方法了。 15 * 可是Dog類對繼承下來的toString()方法很不滿意, 16 * 由於使用這個繼續下來toString()方法將引用對象轉換成字符串輸出時輸出的是一連串使人看不懂的哈希編碼。 17 * 爲了使打印出來的信息使得正常人都能看得懂,所以要在Dog類裏面把這個繼承下來的toString()方法重寫, 18 * 使得調用這個toString()方法將引用對象轉換成字符串時打印出來的是一些正常的,能看得懂的信息。 19 * 在子類重寫從父類繼承下來的方法時,從父類把要重寫的方法的聲明直接copy到子類裏面來, 20 * 這樣在子類裏面重寫的時候就不會出錯了。 21 */ 22 System.out.println("dog="+d);//打印結果:dog=I’m a cool Dog 23 } 24 } 25 26 class Dog{ 27 /** 28 * 在這裏重寫了Object類裏面的toString()方法後, 29 * 引用對象自動調用時調用的就是重寫後的toString()方法了, 30 * 此時打印出來的顯示信息就是咱們重寫toString()方法時要返回的字符串信息了, 31 * 再也不是那些看不懂的哈希編碼了。 32 */ 33 public String toString() { 34 return "I’m a cool Dog"; 35 } 36 }
任何一個類都是從Object類繼承下來的,所以在任何一個類裏面均可以重寫這個toString()方法。toString()方法的做用是當一個引用對象和字符串做鏈接的時候,或者是直接打印這個引用對象的時侯,這個引用對象都會自動調用toString()方法,經過這個方法返回一個表示引用對象本身正常信息的字符串,而這個字符串的內容由咱們本身去定義,默認的字符串內容是「類名+哈希編碼」。所以咱們能夠經過在類裏面重寫toString()方法,把默認的字符串內容改爲咱們本身想要表達的正常信息的字符串內容。code