日期:2014-05-20  浏览次数:20674 次

下面代码为什么不出现类转换异常,刚学java,请详细点,谢谢啦。
class Point {
private Object x;
private Object y;
public Point(Object x, Object y) {
this.x = x;
this.y = y;
}
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
public class Testfanxing {
public static void main(String[] args) {
Point point1 = new Point(1, 1);
System.out.println(point1.toString());
Point point2 = new Point(1.2, "北纬30度");
System.out.println(point2.toString());
Point point3 = new Point("东经100度", "北纬30度");
System.out.println(point3.toString());
}
}
toString中是不是存在向下转型啊? 如果有为什么不出现类转换异常。
------解决方案--------------------
引用:
Quote: 引用:

关键在这里:
public Point(Object x, Object y) 

既然都Object了,那么传啥进去都行。再一个,toString方法是从Object继承过来的,有的类重写过,有的类没有重写,因此不存在转型的问题。

比如,Integer类重写过toString(),所以System.out.println(new Integer(1).toString())的结果就是“1”。没重写的,toString()的结果就是对象的地址了。


int自动封装后变为Integer,再向上转型变为Object,然后变成了String类型,为什么不报错啊?
新手,刚刚开始学java,谢谢la 

不报错的原因是System.out.print方法会自动调用参数的toString方法。另外,String的加号运算符也被重载过,会自动调用其它参数的toString方法。而toString方法是任何对象都有的,所以,不会报错。