给定如下Java代码片段: ```java class Employee { public void work() { System.out.println("Employee is working"); } } class Manager extends Employee { @Override public void work() { System.out.println("Manager is managing"); } public void meeting() { System.out.println("Manager is in a meeting"); } } public class Test { public static void main(String[] args) { Employee emp = new Manager(); // 假设此处存在一条语句,使得程序正常运行 } } ``` 要使上述`Test`类的`main`方法中`emp`对象既能调用`work()`方法,又能调用`meeting()`方法,横线处最合适的代码是:
答案解析
A选项错误,不能直接将父类引用赋值给子类引用,需要强制类型转换。
B选项正确,首先需要将父类引用`emp`强制转换为子类引用`Manager`,才能调用`meeting()`方法,因为`meeting()`方法是子类特有的,父类没有。`work()`方法可以通过多态机制调用子类重写后的方法。
C选项错误,将`emp`强制转换为父类引用`Employee`没有意义,因为`Employee`类中没有`meeting()`方法,调用会导致编译错误。
D选项错误,虽然可以通过强制类型转换Object到Manager,但是Object对象本身并没有存储Manager的额外属性,虽然语法上没有问题,运行时依然会报错。
核心在于需要理解多态和向上转型/向下转型的概念。向上转型(父类引用指向子类对象)后,只能调用父类中定义的方法(包括被子类重写的方法),子类特有的方法无法直接调用。向下转型需要使用强制类型转换,并且必须确保引用的实际类型与转换的目标类型兼容。
正确答案:B