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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 创出一片辉煌 中级黑马   /  2012-7-25 13:52  /  1547 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test{
public static void main(String args[]){
  Student s=new Student();
  System.out.println(s);
   }
}
class Student{
public String toString(Student s){
return s.toString();
}
}

请问大虾,为什么覆写的toString中直接return s;不行。。还有,既然是覆写,那么s.toString()应该是调用覆写的toString方法,为什么效果是调用的Object的方法呢。

5 个回复

正序浏览
public class Test{
public static void main(String args[]){
  Student s=new Student();
  System.out.println(s);
   }
}
class Student{
public String toString(Student s){   //这里是重载(函数名相同,参数列表不同),不是复写(函数除了代码块外要一模一样)。要复写就不要加参数
return s.toString();                     //这里返回的是对象的地址值,即哈希码,不复写,Object类的toString方法也是返回这个值,看不出是调用哪个
}
}


回复 使用道具 举报
准确来说你这个方法写的有点问题。你是想用这个方法来做什么貌似你自己也不清楚。这个方法本身是没有参数的,所以你这算不上重写。
其次你根本就没调用这个方法。你在main函数里输入的s就输出了Student对象s的内存地址,也就是常说的哈希码。
还有就是就算你调用了和没调用的结果都是一样的,你可以试试,你用对象s调用toString方法并传入s,输出的结果与你之前的都是一样的,是对象的内存地址。
回复 使用道具 举报
        重载:只看同名函数的参数列表。
        重写:子父类方法要一模一样(包括返回值类型)
回复 使用道具 举报
public class Test{
public static void main(String args[]){
  Student s=new Student();
  System.out.println(s.toString()


class Student
{
    private String name;
    public Student(){}
    public Student(String name){
         this.name=name;
    }
   public String getName()
  {
   return  name;
}
public String toString()
{
    return this.name;
}
}

如果你没有重写toString方法的话那么你不管是调用s还是s.toString()答应的都是地址值
只有重写了方法后返回给你的是一个属性值,而不是地址值了
在Object里边的toString()方法就是写的了地址值,所以子类不重写的话打印的是地址值






回复 使用道具 举报
你这是覆盖,不是复写,toString()没有参数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马