A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴华二 中级黑马   /  2012-3-14 15:25  /  2819 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我看到一个程序,一直不太理解:
public class TestToString {
        public static void main(String[] args) {
                Dog d = new Dog();
                System.out.println("d:=" + d);
        }
}

class Dog {
        public String toString() {
                return "I'm a cool dog!";
        }
}
知道的帮我一下,谢谢...

9 个回复

倒序浏览
toString方法返回的就是字符串的表现形式
回复 使用道具 举报
是覆写了Dog里的toString()方法
回复 使用道具 举报
Dog类是object类的子类,toString()方法是object的方法,用来返回对象的字符串表示,子类Dog的方法覆盖了父类的toString()方法
回复 使用道具 举报
你需要明白所有的类都继承自Object类:
那我们这就找到Object类,它是不是有一个toString() 表示的是返回该对象的字符串表示。
继承自Object类的toString方法格式 是  包名.类名@xxxx   ,如果你不重写该方法的话,它返回的应该是类名后面有一段引用的地址。
但是你的这个程序中重写了Object类的toString方法,所以后来你的程序中System.out.println("d:=" + d);默认调用了System.out.println("d:=" + d.toString())
然后就输出了Dog方法中的i'm a cool dog.

希望对你有帮助
回复 使用道具 举报
罗闯 发表于 2012-3-14 15:58
你需要明白所有的类都继承自Object类:
那我们这就找到Object类,它是不是有一个toString() 表示的是返回该 ...

俺也不明白,现在了解了。 很详细呀  3Q
回复 使用道具 举报
石德志 黑马帝 2012-3-14 16:18:16
7#
public class TestToString {
        public static void main(String[] args) {
                Dog d = new Dog();
                System.out.println("d:=" + d);
        }
}

class Dog {
        public String toString() {
                return "I'm a cool dog!";
        }
}
这个要从Object 类说起,所有的类都是Object类的子类,Object类中有一个叫做 toString()的方法,
class Dog {
        public String toString() {
                return "I'm a cool dog!";
        }
}
这是Dogl类覆写了toString()方法, System.out.println("d:=" + d);打印对象的时候是隐含的调用对象的toString方法,相当于System.out.println("d:=" + d.toString());打印结果为I'm a cool dog!;

回复 使用道具 举报
这个其实就是多态
回复 使用道具 举报
张润政 黑马帝 2012-3-15 10:36:41
9#
在这个问题中,先说这个toString方法的来历。我们总是希望某些简单的事物能够直接以字符串的表现形式来展现在我们眼前,这样我们可以直观的看到它到底是个什么样子。这个方法就应给被所有的类都具备,所以它定义在了Object类中
那么,这个Object类中的toString打印的是什么呢,它打印的是基本类型的值,或者对象的哈希值。
当你执行打印语句System.out.println("d:=" + d);的时候,它默认调用了toString的方法,如果你的Dog类中没有实现覆盖roString的方法,那么它打印的就是一个对象的哈希值。但是你的Dog类中已经实现了覆盖,那么它调用这个方法的时候会先从子类来寻找这个方法,优先使用这个方法,那么他就打印了 "I'm a cool dog!";它的具体实现过程就是这么个样子吧。
回复 使用道具 举报
如果要了解原理最好是源码
那看看Object源码
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
他是利用反射获得类名加“@”和他的十六进制类的hashcode值
如果你不从写的话就是打印为d:=Dog@c17164

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马