在Java中,关于多态和继承的理解,以下代码的输出结果是什么? ``` class Employee { public int grade = 5; public void job() { System.out.println("我是一名普通的员工"); } public void run() { System.out.println("我在工作"); } } class Manager extends Employee { public int grade = 8; @Override public void job() { System.out.println("我是一名经理"); } public void meeting() { System.out.println("我在开会"); } } public class Example4_12 { public static void main(String[] args) { Employee em = new Manager(); System.out.println(em.grade); em.job(); } } ```
答案解析
在Java中,多态性允许子类的对象被当作父类的对象来处理。在这个例子中,`Employee em = new Manager();` 创建了一个Manager对象,但它的引用类型是Employee。因此,访问`em.grade`时,由于grade是实例变量,所以访问的是Employee类的grade,输出5。然而,当调用`em.job()`时,由于job()方法在Manager类中被重写,所以实际调用的是Manager类的job()方法,输出"我是一名经理"。因此,正确答案是C。选项A错误地认为job()方法没有被重写。选项B和D错误地认为grade的值是8,忽略了实例变量的访问规则。
正确答案:C