黑马程序员技术交流社区

标题: 覆写object类方法toString()的问题 [打印本页]

作者: 黑马一刘昭    时间: 2013-5-16 09:21
标题: 覆写object类方法toString()的问题
本帖最后由 黑马一刘昭 于 2013-5-16 13:23 编辑

class lopjupersonp
{
        public static void main(String[] args)
        {
                person p = new person("will","boy",17);//利用构造函数创建对象的时候直接赋初值,把值传递给构造函数
                System.out.println(p.toString());
        }
}

class person
{
        String name;
        String gender;
        int age;
        public person(String name,String gender,int age)
        {
                this.name = name;
                this.gender = gender;
                this.age = age;
        }
        @Override
        public String toString()//这个是对object父类方法的覆写,
        {
                return "[name= "+this.name+",性别="+this.gender+",年龄"+this.age+"]";//我想知道这句是什么意思,为什么前面会有return,这句话和上面的主函数的输出语句是怎么联系起来的!
        }
}


作者: 张金铎    时间: 2013-5-16 09:26
本帖最后由 张金铎 于 2013-5-16 09:35 编辑

        首先说函数的格式:
                修饰符 返回值类型 函数名(参数类型 参数1,参数类型 参数2,...)
                {
                        执行语句;
                        return 返回值;
                }

return 返回值 函数的结果由return带回,哪里调用函数,返回值就带回到哪里。(当然如果生命返回值为void 空类型,也就不用写 return ,例如例子中main()方法,没有返回值。)
再说说你例子中用对象调用了toString()方法,所以return 就把和面的字符串"[name= "+this.name+",性别="+this.gender+",年龄"+this.age+"]"返给了System.out.println();所以完成了打印姓名,性别,年龄。声明函数时 返回值类型写的什么 return 后面就要跟什么类型。toString()方法的返回值是String 所以return 后面是一个字符串。不明白的再问我啊。
作者: 尹丽峰    时间: 2013-5-16 10:37
  public String toString()//这个是对object父类方法的覆写,  但是toString有返回值类型  而且是String类型的
        {
                return "[name= "+this.name+",性别="+this.gender+",年龄"+this.age+"]";// 这里相当与把这引号里的内容传给System.out.println 输出一样
       }

作者: 袁梦希    时间: 2013-5-16 10:40
楼主你好   如果问题已经解决  把帖子改为“已解决”
作者: liuelxiwd    时间: 2013-5-16 10:40
楼上正解,给你拓展一下关于java中的return:
java中的return可以有两种,return;和return xx;
先说return,代码执行到此处终止,也就是说,我调用方法B,从上到下把B里面的代码执行完,就什么也不干了,也不需要返回结果,就直接用return;
第二种,return xx,当你执行该方法后需要返回一个值给调用者,就要有参数
public string functionTest(){
         String a = "abc";
         return a;
}
当然,如果你定义的方法不需要有返回值,最简便的办法就是声明它的返回类型为void,例如:
public void test(){
System.out.println("hello world!");
}
作者: 袁梦希    时间: 2013-5-16 11:50
楼主你好   如果帖子已经解决  请把帖子的类型改为“已解决”。
作者: 黑马一刘昭    时间: 2013-5-16 13:23
张金铎 发表于 2013-5-16 09:26
首先说函数的格式:
                修饰符 返回值类型 函数名(参数类型 参数1,参数类型 参数2,...)
                {

哥们,回答的相当漂亮,非常感谢!!论坛大神就是多。:handshake
作者: 黑马一刘昭    时间: 2013-5-16 13:24
尹丽峰 发表于 2013-5-16 10:37
public String toString()//这个是对object父类方法的覆写,  但是toString有返回值类型  而且是String类 ...

谢谢,谢谢!!
作者: 黑马一刘昭    时间: 2013-5-16 13:28
liuelxiwd 发表于 2013-5-16 10:40
楼上正解,给你拓展一下关于java中的return:
java中的return可以有两种,return;和return xx;
先说return, ...

我想问下:你说的第一种return 是不是可以不写出来,代码执行完了就完了,也不用返回,什么都不做!
作者: liuelxiwd    时间: 2013-5-16 14:40
黑马一刘昭 发表于 2013-5-16 13:28
我想问下:你说的第一种return 是不是可以不写出来,代码执行完了就完了,也不用返回,什么都不做! ...

写不写出来取决于你前面的类型,除了void,其他的都要写出来
作者: 张金铎    时间: 2013-5-16 14:52
黑马一刘昭 发表于 2013-5-16 13:23
哥们,回答的相当漂亮,非常感谢!!论坛大神就是多。

首先帮到你我很高兴,我可不是大神,我还是小菜鸟,这个问题老师讲过,所以懂得都告诉你了。希望共同进步啊
作者: 黑马一刘昭    时间: 2013-5-16 14:54
liuelxiwd 发表于 2013-5-16 14:40
写不写出来取决于你前面的类型,除了void,其他的都要写出来

那你看这个,是我根据你说的写的,这时候它提示缺少返回值,在return 后面加上0之后就ok了,这怎么理解?谢谢

class person
{
        int a = 1;
        int b = 2;
        int plus()
        {
                int i = a+b;
                return ;
        }
}

class hgytu
{
        public static void main(String[] args)
        {
                person p = new person();
                System.out.println(p.plus());
        }
}

作者: liuelxiwd    时间: 2013-5-16 15:13
黑马一刘昭 发表于 2013-5-16 14:54
那你看这个,是我根据你说的写的,这时候它提示缺少返回值,在return 后面加上0之后就ok了,这怎么理解? ...

不好意思,解释的有些地方不太准确,是这样的:
Java中的return语句总是和方法有密切关系,return语句总是用在方法中

,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一

个是结束方法的执行(仅仅一个return语句)。

在return语句的各类文章中,大多仅仅介绍了return语句用于有返回值(

非void返回值)的方法中。而很少或没有介绍return语句在vodi返回值方

法中的运用。

return语句用在非void返回值类型的方法中,不但能返回基本类型,还可

以返回(包括用户自定义类的)对象。

下面通过一个简单例子说明一下:

/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-12-3
* Time: 8:54:28
* Java中的return语句使用总结
*/
public class TestReturn {
public static void main(String args[]) {
TestReturn t = new TestReturn();
t.test1();
t.test2();
}

/**
* 无返回值类型的return语句测试
*/
public void test1() {
System.out.println("---------无返回值类型的return语句测试--------");
for (int i = 1; ; i++) {
if (i == 4) return;
System.out.println("i = " + i);
}
}

/**
* 有返回值类型的return语句测试
* @return String
*/
public String test2(){
System.out.println("---------有返回值类型的return语句测试--------");
return "返回一个字符串";
}
}
作者: 黑马一刘昭    时间: 2013-5-16 23:54
张金铎 发表于 2013-5-16 14:52
首先帮到你我很高兴,我可不是大神,我还是小菜鸟,这个问题老师讲过,所以懂得都告诉你了。希望共同进步 ...

谢谢。我刚学到第八天,加油!一同成为黑马人!!:handshake
作者: 黑马一刘昭    时间: 2013-5-17 00:02
liuelxiwd 发表于 2013-5-16 15:13
不好意思,解释的有些地方不太准确,是这样的:
Java中的return语句总是和方法有密切关系,return语句总是用 ...

well done!谢谢!:handshake




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