黑马程序员技术交流社区

标题: 关于toString() [打印本页]

作者: 雷楚光    时间: 2012-2-23 18:20
标题: 关于toString()
看下面的代码,为什么会自动调研toString()而改成其他方法却不可以,如tostring();
上次看到个equals(obj)方法也是;为什么会如此特殊?
public class test
{

        public static void main(String[] args)
        {
                eum e=eum.e1;
                System.out.print(e.next());
        }
}

class eum
{
        private eum()
        {

        }

        public static eum e1 = new eum();
        public static eum e2 = new eum();

        public eum next()
        {
                if (this == e1)
                {
                        return e2;
                }
                return e1;
        }

        public String toString()/*为什么会自动调研toString()而改成其他方法却不可以,如tostring()*/
        {
                return this == e1 ? "e2" : "e1";
        }
}
作者: 朱皓    时间: 2012-2-23 18:35
因为这是JAVA虚拟机提供的机制,没有为什么或者说是java的工程师已经写好了的,记住就行了
作者: H07000223    时间: 2012-2-23 18:46
因为打印语句System.out.print其实调用的就是每个对象所属类的toString方法~~~亲

对于这种由System系统类产生的方法还是别改了吧~~~再说也没什么必要,又帮你定义好了方法,而且也很好用,干嘛不用非得去自己造一个呢~~~
作者: 泮和顺    时间: 2012-2-23 19:13
我总感觉这个程序好像哪里有问题 。。。

作者: 黄凯    时间: 2012-2-23 19:37
toString方法其实在Object类中被定义了。
而Object类又是java中所有类的父类,自然每个类都继承了toString方法。
当然你也可以自已定义一个自己的tostring(),以达到你自己想要的效果。
作者: 泮和顺    时间: 2012-2-23 19:37
可以的 比如如tostring();
但是输出的好像是地址
作者: 何洪森    时间: 2012-2-23 19:46
如果你用System.out.println();输出对象,如果不覆写toString方法,则默认就是打印对象所占用的内存地址,因为打印是
打印一个字符串显示出来,属于字符串类型,toString()方法也是String中的,所以要重写toString()方法。
作者: 雷楚光    时间: 2012-2-24 10:49
我明白了,应该是说 Object类一切类的父类,而class eum继承了它并重写了toString()方法。
当调用System.out.println()时,它就会调用里面的toString()方法。
作者: 唐溪永    时间: 2012-2-24 11:16
java中有些关键字是不能改了,同时有些基本类也是不能改了,还是就是java中对大小绝对的敏感,像toSting();是java中的一个基本重要的方法,为保护他,再根据java的规范,其他的像tostring这样的易于混淆的就不能用了。

重点在于,toString();、equals();这2个方法是Object类,即所有类的父类的基本方法,也就是说,所有子类都要继承于它,为了保护,java中规定可以继承与重写,就是不能改变。、

这个绝对不能乱改的东西还是要记好呀
作者: 刘丁    时间: 2012-2-24 11:27
System.out.print(e.next()); 中 e.next()返回的是一个对象,而直接输出一个对象时系统默认的调用该对象的toString()方法,一般toString()方法返回的是完整的类名称@hash地址,可以重写toString()方法让它按照我们自己想要的输入方式输出 。。
作者: 陈伟    时间: 2012-2-24 12:12
toString()方法是祖先类Object中的一个方法,每个类都继承Object,所以每个类中都有这个toString()方法,如果想自己重新定义这个方法的功能,就需要自己复写,
你这个例子中就是复写了toString()方法,而复写的条件就是方法名必须完全一样,所以你不能把方法名字换成tostring,如果换方法名,JVM在调用这个方法的时候还会调用Object类中的那个方法,而不会调用你定义的这个tostring方法
作者: 雷楚光    时间: 2012-2-26 09:57
看了注释之后,又不明白了,
它没用@Override标记怎么会重写父类的方法?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2