关于在Java中铸造参考变量,我有一些不清楚的地方。在Java中铸造参考变量
我有两个类A和B,A是超类B. 的如果我有两个对象,然后将打印声明:
A a = new A(); //superclass
B b = new B(); //subclass
System.out.println ((A)b);
那么究竟是什么发生时println方法执行?
我知道,由于B是A的子类,允许我进行以下转换:
A a2 = (A)b;
我还知道,当的println取参考变量作为参数,则toString()方法(已经创建了对象参数)被调用(隐式地)。这是因为println()方法正在寻找一个String类型的参数,并且toString()方法将该对象表示为一个字符串。即使我们不写toString(),也会隐式地调用该方法。所以,下面的两个语句是等价的:
System.out.println (b);
System.out.println (b.toString());
所以,我的问题是:是采取什么样的隐含动作时,我们有
System.out.println ((A)b);
?
我假设参考变量b的类型自动从B到A的可变仍然应该指向相同的对象改变 - 一个与
B b = new B();
创建,但B的仅仅是类型现在会改变。它是否正确? 另一个问题:即使我已将b的类型更改为超类的类型,子类中的overriden方法将被调用,而不是超类的方法?
非常感谢。
问候
如果传递的参数是String,则不会调用toString()。在其他情况下是的。 – 2009-01-31 04:37:25