下面代码的输出结果【中国台湾著名杀毒软件公司 面试题】
答案
classB
classB
classA
有疑问的话也就是第二个输出,
其实子类强转为父类其实是为了迷惑大家,强转操作是没有必要的。
这时就非常简单了,Java的多态所以输出classB
我们再看另外一道题
下面程序的输出结果是什么?【中国著名门户网站公司 校招笔试题】
A、 Father Father B、 Father Child C、编译失败 D、以上答案都不对
解析:
答案应该是A。
两个getName方法是静态方法,在内存中的地址空间是固定的,不会冲突。
两个方法再内存中占用不同的空间,具体执行哪一个,则要看由哪个类来调用。
因为是静态方法且引用都是Father,所以只会调用Father的方法
如果换成下面写法(去掉static)
答案选择B.
总结
多态子父类的类型转换
在多态中,
成员函数 在多态调用时,编译看左边,运行看右边。
成员变量 :无论编译和运行,都参考左边(引用型变量所属的类)。
静态成员函数 :无论编译和运行,都参考做左边。