java中重写toString方法报错。

public class Test {
public static void main(String[] args) {
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1.equals(s2));
System.out.println(s1==s2);
System.out.println(s1);
}

public String toString() {
return this;
}
}

错误:C:\Documents and Settings\Administrator\桌面\Test.java:11: 不兼容的类型
找到: Test
需要: java.lang.String
return this;
^
1 错误

工具以退出代码 1 完成

第1个回答  2011-04-26
第一 你返回this 不对,第二 String类 属于 final类 不能被子类继承,所以不能重写 String类的方法,除非你建个工具类 自己写toString()方法追问

public class Test {
public static void main(String[] args) {
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1.equals(s2));
System.out.println(s1==s2);
System.out.println(s1);
}

public String toString() {
return this+"";
}
}
String类的toString方法还是可以重写的,这样就不会报错了。

追答

这不叫重写 ,这叫 你自己写的toString()方法

追问

不对,String类的toString方法不是final修饰的,还是可以重写的。

追答

你需要实现的效果是什么样的?

本回答被提问者采纳
第2个回答  2013-12-04
public String toString() { 看这句你可以看到 toString方法返回的是一个 String类型的,

而你的 this 属于Test类对象 而 Test类又不是继承 String类的,所以类型肯定不对,
当你return this+""; 的时候 this + "";这个表达式 的值是字符串的了 也就是String类型,所以是对的
第3个回答  2011-04-26
每个类都有一个继承自基类Object的toString()方法,而你把这个方法给重写了,但返回值的类型和方法的返回类型不对照,所以才报错,试着把toString()的返回值改成return this+'';
第4个回答  2011-04-26
this是当前的对象不是字符串
额。。。你当前对象中没有定义字符串
所以只有 return super.toString();了
呵呵 和没重写这个方法一样追问

我想重写toString方法,让它返回对象本身的引用,该该如何写呢?

追答

对象本身的应用返回值为一个对象
public Test toString() {
return this;
}

追问

你试一下,还是会报错的。

追答

你确定会报错?

第5个回答  2011-04-26
类型不兼容,当前Test 是一个class,不能转换为String