面向对象集|每日一题:最后一条语句的结果是什么?

394 阅读1分钟

类 Teacher 和 Student 是类 Person 的子类:

Person p = new Person();
Teacher t = new Teacher();
Student s = new Student();
if (t instanceof Person) { s = (Student) t; }

最后一条语句的结果是:( )

A. 表达式是错误的

B. 表达式是合法的

C. 编译时正确,但运行时错误

D. 将构造一个 Student 对象

解析: 在 Java 中是不允许出现两个子类或无关类之间的相互转换的,但是允许子类和父类之间的转换,即向上类型转换和向下类型转换。

这本身也很好理解,程序都是来自于现实生活的抽象。如果这里的 Person(人类)换成动物类, Teacher(教师类)换成狗类,Student(学生类)换成猫类,依然是和题干类似的关系,但狗类和猫类能相互转换吗?自然是不能的。

所以,这最后一条语句的结果就是:编译错误,会提示 Cannot cast from Teacher to Student。

其实,我们在写代码的时候,都知道这回事,就像下方代码:

Integer i = 10;
// 需求:将整数转换为字符串
String s = (String) i;

将整数类型直接强转为字符串类型,肯定是报错的,我们平时也没这么写过。