我对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());
所以,我的问题是:当我们有 <\/p> 标签时,会采取什么隐含的操作?
System.out.println ((A)b);
我猜测引用变量 b 的类型会自动从 B 改为 A。该变量仍应指向同一对象——使用
B b = new B();
但是b的类型现在会被改变,这样正确吗?另一个问题:尽管我已经将b的类型更改为超类的类型,但子类中的重写方法将被调用,而不是超类的方法吗?
非常感谢。
敬礼