Employee e = new Manager();e实际上是Manager的实例,在这里进行了向上转型可以这么理解Manager m=new Manager();Employee e=(Employee)m; //但是e的Employee类型比较窄,这里强制转换是多余的e实质上是m的引用,因此,Employee e = new Manager();中e是Manager的实例,要使用与Employee类非重叠部分就要强制转换回来 ((Manager)e).method...

解决方案 »

  1.   

    (Employee)m这种手法,是不是可以理解成 Employee m 的强制声明手法,我在一些书中有看到,但是没理解。
    还有,Employee e = new Manager()这种用法,在实际应用中有什么样的作用呢?非常感谢你的回答
      

  2.   

    我的理解是对象的引用在JAVA的实现中是有内存地址越界检查的,因而题中的Employee e是class Employee的一个引用,它的内存可知范围只是class Employee定义的范围,即使用比它大的class Manager的内存空间来初始化,e也只能访问它可以知道的内存范围,因而有以上结果。
      

  3.   

    基本同意 yeahspyme(行者)
    我的理解是你定义了e为Employee,那么你对Employee的所有操作,系统只去找Employee.class以及Employee的所有父类的库,而department字段是Manager的,也就是在Manager.class中的
      

  4.   

    楼上的你说Employee的所有操作,系统只去找Employee.class以及Employee的所有父类的库,但是如果Manager中重写了Employee中的方法,情况不是这样子的
      

  5.   

    我觉得还是:Employee e只是给e声明了一下,说明e是属于Employee这个类,而new Manager则是给e分配了实际动作所需的空间,但由于e是属于Employee,所以它只能调用Employee的方法。