在这个问题中,先说这个toString方法的来历。我们总是希望某些简单的事物能够直接以字符串的表现形式来展现在我们眼前,这样我们可以直观的看到它到底是个什么样子。这个方法就应给被所有的类都具备,所以它定义在了Object类中
那么,这个Object类中的toString打印的是什么呢,它打印的是基本类型的值,或者对象的哈希值。
当你执行打印语句System.out.println("d:=" + d);的时候,它默认调用了toString的方法,如果你的Dog类中没有实现覆盖roString的方法,那么它打印的就是一个对象的哈希值。但是你的Dog类中已经实现了覆盖,那么它调用这个方法的时候会先从子类来寻找这个方法,优先使用这个方法,那么他就打印了 "I'm a cool dog!";它的具体实现过程就是这么个样子吧。 |