JAVA中如何覆盖Object类的toString()方法。

public class Car{
String maker;
String color;
double value;
public String toString(){
System.out.println(new Car());
return null;
}
public static void main(String[] args){
Car Toyota=new Car();
Toyota.maker="Japan";
Toyota.color="red";
Toyota.value=250000.0;
System.out.println(new Car());
这段程序中如何改动才能使最后的输出结果是类的所有属性?
我的意思就是如何编写一个类通过覆盖Object类的toString()方法,打印你创建这个类的所有属性。

参考了API,这个方法是可以重写的,但是必须遵循原来的规则,下面是API上的解释:toString

public String toString()

返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

返回:
该对象的字符串表示形式。

下面是改正后的程序。
你的那句System.out.println(new Car());有问题,
public class Car{
String maker;
String color;
double value;
public String toString(){
return "这个汽车是"+maker+"制造的"+","+"颜色是"+color+"很好看的!"+"价钱是"+value;

}
public static void main(String[] args){
Car Toyota=new Car();
Toyota.maker="Japan";
Toyota.color="red";
Toyota.value=250000.0;

System.out.println(Toyota);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-02
Object的方法是不能覆盖的。
如果仅仅是想把你自己定义的一系列类的toString方法定义好,那么可以用反射。
class YourObject
{
public string toString ()
{
getClass ().getFields () ;
for each field
print (field.name = field.value ) ;
}
}

估计用动态修改字节码的办法也不行,因为Object是早于你的类加载的。而且用的是BootStrap class loader。

要不然就单独定义一个classLoader,重新加载Object类,然后用字节码修改的方式来完成。感觉很麻烦。

还有一种方法相对简单一些,就是把Object的源代码拿过来,改成你需要的代码。编译后,替换原来的JRE中的class文件。但这种方法不能改动已经覆盖了toString实现的那些类。

不知道你想达到什么目的?
第2个回答  2009-04-02
public class Car{
String maker;
String color;
double value;
public Car()
{
this.maker="";
this.color="";
this.value=0.0;
}
public Car(String maker,String ccolor,double value)
{
this.maker=maker;
this.color=ccolor;
this.value=value;
}
//Override
public String toString(){
return "制造地:"+this.maker +" 颜色:"+this.color+" 价格:"+this.value;
}
public static void main(String[] args){
Car Toyota=new Car("Japan","red",25000d);
System.out.println(Toyota.toString());
}
} 可以直接执行
第3个回答  推荐于2018-03-07
public class Car{
String maker;
String color;
double value;
public String toString(){
return ("\nMaker: " + maker + "\nColor: " + color + "\nvalue: " + value);
}本回答被提问者和网友采纳
第4个回答  2009-04-02
public String toString(){
return maker+","+color+","+value;
}