高淇Java視頻代碼中,為啥使用Date類新建對(duì)象進(jìn)行打印輸出的是時(shí)間,而使用自建對(duì)象打印輸出的卻是哈希碼地址?
問(wèn)題描述
最近看高老師視頻時(shí)發(fā)現(xiàn)一個(gè)知識(shí)點(diǎn)不太理解,代碼如下:
public class Test065 { public static void main(String[] args){Date d = new Date();//得到當(dāng)前時(shí)間的毫秒數(shù)System.out.println(d);Dog a = new Dog();System.out.println(a); }}class Dog{ int age;}
輸出結(jié)果如下:
Thu Jun 15 19:43:29 CST 2017com.test065.Dog@33909752
同樣是打印一個(gè)對(duì)象,為什么Date類對(duì)象就是輸出當(dāng)前時(shí)間,而自建對(duì)象就是輸出哈希碼呢?
小萌新求各位朋友解惑,非常感想!
問(wèn)題解答
回答1:Println方法會(huì)調(diào)用輸出對(duì)象的toString方法,如果對(duì)象沒(méi)有定義toString方法,就按照繼承鏈往父類找。Date有定義toString方法,所以輸出的是格式化的屬性信息。自定義的Dog類沒(méi)有toString方法,所以用的父類的toString方法,也就是Object的
回答2:打印一個(gè)對(duì)象的時(shí)候,會(huì)打印出它的toString方法的返回值,Date重寫了toString方法。Dog沒(méi)有重寫toString則會(huì)調(diào)用父類Object的toString方法
回答3:Date類重寫了Object父類中的toString(),你自己的類沒(méi)有啊。。。看下Date類的源碼
回答4:重寫了toString方法,你可以自己到源碼中看。
