neulf(快乐程序员): 4是错误的, y 和 z 都是A的子类,他们是兄弟关系,当然是不能互相转换的。
1 correct 2,4,5 compile error
在JBUILDER3.5下编译后 1可以通过编译.其他都被毙掉了.大家可以试试
1。编译运行通过。(基类指针指向子类) 3。编译通过,运行不通过。(语法检查时通过,但不能转换,attempted to cast an object to a subclass of which it is not an instance) 2、5、4。编译不通过。java中不支持运算符重载,问题变得简单了(java的好处)。
原因如下:
JAVA的类重载机制,直接赋值时,必须由父类赋给子类.那样JVM在编译时,自动把子类中的与父类中不同的属性和方法去除了.反过来当然不行.
强制转换时,JVM才可以根据强制的类型把子类中有,父类没有的属性和方法强加进父类实例.即完成了有父类转化到子类的过程.这也正是不是任何类之间都可以转换的原因所在.
一定要是超类才可以转换成继承它的子孙类.(呵!子孙类是我自己想出来的,觉得比较贴切.)
4是错误的, y 和 z 都是A的子类,他们是兄弟关系,当然是不能互相转换的。
2,4,5 compile error
3。编译通过,运行不通过。(语法检查时通过,但不能转换,attempted to cast an object to a subclass of which it is not an instance)
2、5、4。编译不通过。java中不支持运算符重载,问题变得简单了(java的好处)。