某程序中有如下的类及对象的定义:class ParentClass {}class SubClass1 extends Pare
2024-08-04Java语言程序设计(一)(04747)
某程序中有如下的类及对象的定义:class ParentClass {}
class SubClass1 extends ParentClass{}
class SubClass2 extends ParentClass{}
ParentClass a = new ParentClass ();
SubClass1 b= new SubClass1();
SubClass2 c = new SubClass2();当执行语句b=(SubClass1)c;时,结果是
A、编译时出错
B、编译时正确,但执行时出错
C、执行时完全正确
D、不确定
【正确答案】:A
名师解析:在Java中,子类可以被向上转型为父类,因为子类是父类的特殊形式。但是,当尝试将一个父类的对象向下转型为一个子类时,必须确保这个对象实际上是那个子类的实例。在提供的代码中,`b`是`SubClass1`的一个实例,而`c`是`SubClass2`的一个实例。尽管`SubClass1`和`SubClass2`都继承自`ParentClass`,但它们是不同的类,并且没有继承关系。因此,将`c`(`SubClass2`的实例)向下转型为`SubClass1`是不安全的,并且会导致编译错误。这是因为Java编译器无法确定`c`是否实际上是`SubClass1`的实例,所以不允许这种类型转换。正确的做法是使用`instanceof`操作符来检查对象是否是特定类的实例,然后再进行类型转换。因此,选项A是正确的答案。
class SubClass1 extends ParentClass{}
class SubClass2 extends ParentClass{}
ParentClass a = new ParentClass ();
SubClass1 b= new SubClass1();
SubClass2 c = new SubClass2();当执行语句b=(SubClass1)c;时,结果是
A、编译时出错
B、编译时正确,但执行时出错
C、执行时完全正确
D、不确定
【正确答案】:A
名师解析:在Java中,子类可以被向上转型为父类,因为子类是父类的特殊形式。但是,当尝试将一个父类的对象向下转型为一个子类时,必须确保这个对象实际上是那个子类的实例。在提供的代码中,`b`是`SubClass1`的一个实例,而`c`是`SubClass2`的一个实例。尽管`SubClass1`和`SubClass2`都继承自`ParentClass`,但它们是不同的类,并且没有继承关系。因此,将`c`(`SubClass2`的实例)向下转型为`SubClass1`是不安全的,并且会导致编译错误。这是因为Java编译器无法确定`c`是否实际上是`SubClass1`的实例,所以不允许这种类型转换。正确的做法是使用`instanceof`操作符来检查对象是否是特定类的实例,然后再进行类型转换。因此,选项A是正确的答案。

扫描二维码免费使用微信小程序搜题/刷题/查看解析。
版权声明:本文由翰林刷题小程序授权发布,如需转载请注明出处。