+ -
当前位置:首页 → 问答吧 → 向下转与覆盖的问题

向下转与覆盖的问题

时间:2011-11-24

来源:互联网

C c = new C();
((B)c).f();
C是B的子类,C中的f方法覆盖了B中的f方法,为什么执行的二行的时候调用的是C中的f方法?

作者: MornJ   发布时间: 2011-11-24

c转化为b类,只是类型的变化,内存内容没有变?

作者: hbgtsdgx   发布时间: 2011-11-24

new的什么对象就是调用什么对象的方法。和你声明的引用类型没关系。

作者: chenjing0320   发布时间: 2011-11-24

(B)c 这句只是把c引用的对象当做B类型来用,但实际的对象还是c.

作者: chenjing0320   发布时间: 2011-11-24

B c = new C();

作者: zhaofei466   发布时间: 2011-11-24

引用 4 楼 zhaofei466 的回复:

B c = new C();

楼上精致,典型父类引用指向子类对象的多态。
只是你的((B)c)写法可能让你混乱了

作者: haoxiaoliang   发布时间: 2011-11-24

如果对象还是C的话
System.out.println(((B)c).a);
输出的却是B类中的a,这是为什么?
引用 2 楼 chenjing0320 的回复:

new的什么对象就是调用什么对象的方法。和你声明的引用类型没关系。

作者: MornJ   发布时间: 2011-11-24

额。。这是老师讲多态时举的例子
引用 5 楼 haoxiaoliang 的回复:

引用 4 楼 zhaofei466 的回复:

B c = new C();

楼上精致,典型父类引用指向子类对象的多态。
只是你的((B)c)写法可能让你混乱了

作者: MornJ   发布时间: 2011-11-24

引用 6 楼 mornj 的回复:
如果对象还是C的话
System.out.println(((B)c).a);
输出的却是B类中的a,这是为什么?

引用 2 楼 chenjing0320 的回复:

new的什么对象就是调用什么对象的方法。和你声明的引用类型没关系。

因为成员变量和静态方法没有重载

作者: chenjing0320   发布时间: 2011-11-24