黑马程序员技术交流社区
标题:
关于toString方法
[打印本页]
作者:
创出一片辉煌
时间:
2012-7-25 13:52
标题:
关于toString方法
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的方法呢。
作者:
王志明
时间:
2012-7-25 13:55
你这是覆盖,不是复写,toString()没有参数
作者:
刘海源
时间:
2012-7-25 19:24
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()方法就是写的了地址值,所以子类不重写的话打印的是地址值
作者:
徐帅
时间:
2012-7-25 21:38
重载:只看同名函数的参数列表。
重写:子父类方法要一模一样(包括返回值类型)
作者:
fiend
时间:
2012-7-25 21:59
准确来说你这个方法写的有点问题。你是想用这个方法来做什么貌似你自己也不清楚。这个方法本身是没有参数的,所以你这算不上重写。
其次你根本就没调用这个方法。你在main函数里输入的s就输出了Student对象s的内存地址,也就是常说的哈希码。
还有就是就算你调用了和没调用的结果都是一样的,你可以试试,你用对象s调用toString方法并传入s,输出的结果与你之前的都是一样的,是对象的内存地址。
作者:
梁志仲
时间:
2012-7-25 23:41
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方法也是返回这个值,看不出是调用哪个
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2