问答详情
源自:10-1 Java 中的多态

最后的练习:如果在父类中不写方法直接用toString(),子类继承父类,为何输出的结果不能显示子类的名称?

父类页:

public class Tarric {

int num;

@Override

public String toString() {

return "Tarric [num=" + num + "]";

}



测试页中:

public static void main(String[] args) {

Tarric bus=new Tarric();

Tarric ship=new Tarric();

Tarric plane=new Plane();

bus.num=40;

ship.num=200;

plane.num=100;

System.out.println(bus);

System.out.println(ship);

System.out.println(plane);

}


运行结果

http://img.mukewang.com/565fb6e00001c29503350144.jpg

提问者:coocoo爱上猫 2015-12-03 11:29

个回答

  • HansonQ
    2015-12-03 13:49:54
    已采纳

    //重写的概念是:子类重写父类的方法叫重写
    //重载的概念是:重写本类中的方法,其方法名相同,参数列表不同(包括顺序,类型等等)
    //那为什么要重写父类的方法呢?
    //因为父类的方法不满足要求,就好像你刚才要输出子类的类名,父类的toString是没办法完成的。因此只有子///类自己重写实现了
    //IDE工具一般都是有快捷键(ctrl + alt + s)自动重写toString方法的。而且有个编程规范就是每建一个类最好//都重写toString方法


  • HansonQ
    2015-12-03 13:37:20

    public String toString() {
    return "Tarric [num=" + num + "]";
    }
    //这段里面根本就没有输出子类名称的语句。
    //还是没怎么懂你的意思,Tarric这个类是父类,它重写了Object类的toString方法,
    //就是这一句话"Tarric [num=" + num + "]"这句话只是输出了类中的属性NUM
    假设有个类叫A  A extends Tarric 要想输出子类的类名的话,子类也得重写Tarric这个父类的toString方法。


  • HansonQ
    2015-12-03 13:30:06

    没有看到你的子类