我用Eclipse创建了个java project后Add一个包(方法覆盖程序举例).在里面加个OverrideExample.java输入书上的代码.package 方法覆盖程序举例;import java.awt.*;
import java.applet.Applet;
class aaa
{
double f(double x,double y)
{
return x*y;
}
}
class bbb extends aaa
{
double f(double x,double y)
{
return x+y;
}
}
public class OverrideExample extends Applet
{
bbb obj;
public void init()
{
obj=new bbb();
}
    public void paint(Graphics g)
    {
     g.drawString("the object is "+obj.toString(),5,20);
     g.drawString("the program's output is "+obj.f(4,6),5,40);
    }
}输出结果是:
the object is 方法覆盖程序举例.bbb@e4f972
the program's output is 10.0
书上的结果是:
the object is 方法覆盖程序举例.bbb@a6d511
the program's output is 10.0
其他的我明白,类名后面跟个"@e4f972"或"@a6d511"是什么意思?

解决方案 »

  1.   

    @前面是类名,后面是地址啊!!
    你如果只想显示类名,就自己重写toString方法!如:
    public String toString()
    {
        return "aaa";
    }
      

  2.   

    嗯,tostring()的结果,是某种算法所得,你可以自己根据需要重写这个方法。
      

  3.   

    @前面是类名,后面是地址啊!! 
    没错 这个地址 叫 哈希码,表示这个对象在内存中的地址这是object默认的to String 方法
    你可以重写它
    你如果只想显示类名,就自己重写toString方法! 如: 
    public String toString() 

        return "aaa"; 
    }
      

  4.   

    我们看一下toString()的源代码    public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
      

  5.   

    我整理的一个入门级的帖子,请参考 http://blog.csdn.net/java2000_net/archive/2008/10/09/3041577.aspx
      

  6.   

     是的,如果不重写toString()方法,那么打印对象就是这样,后面加上散列码
     所以可以自己充血toString()方法:
    public String toString(){
          return "";   //可以返回对象的属性值
    }