- 2
- 0
- 约1.47万字
- 约 68页
- 2017-04-07 发布于湖北
- 举报
多态的一些细节 假如两种类型之间没有继承关系,即不在继承树的同一个继承分支上,那么Java编译器不允许进行类型转换,例如: Dog dog=new Dog();Cat cat=(Cat)dog; //编译出错,不允许把Dog引用类型转换为Cat引用类型 (2)对于一个引用类型变量,运行时Java虚拟机按照它实际引用的对象来处理。例如以下代码虽然编译可以通过,但运行时会抛出ClassCastException运行时异常: Base who=new Base(); //who引用Base类的实例Sub s=(Sub)who; //运行时抛出ClassCastException 在运行时,子类的对象可以转换为父类类型,而父类的对象实际上无法转换为子类类型。因为通俗的讲,父类拥有的成员子类肯定也有,而子类拥有的成员父类不一定有。 多态的一些细节 假定Java虚拟机能够把子类对象转换为父类类型,那么以下代码中的sub.subMethod()方法无法执行: Base who=new Base(); //who引用Base类的实例Sub sub=(Sub)who; //假定运行时未出错sub.subMethod(); //sub引用变量实际上引用Base实例,而Base实例没有subMethod()方法 由此可见,在运行时,Java虚拟机无法把子类对
原创力文档

文档评论(0)