这么写是合法的只要department和getDetails()是子类Manager继承父类Employee的,就通过

解决方案 »

  1.   

    public class Employee {
      private String name;
      private int salary;
      public String getDetails() {
      return Name: " + name + "\nSalary: " + salary;
      }
    }public class Manager extends Employee {
      private String department;  public String getDetails() {
        return super.getDetails() + // call parents' 
                             // method
          "\nDepartment: " + department;
      }
    }Department是Manager中的域。
    我的问题是,在
    Employee e = new Manager()
    e.department = " Finance " ; // illegal
    e.getDetails();//ligal

    getDetails()是Manager类中的,还是Emplouee类中的
      

  2.   

    那是因为对于编译器来说,在那两行的e只是一个Employee的对象,不认为是一个Manager对象(当然在运行过程中它的确是一个Manager对象)
    所以e.department,编译器只会在Employee中查找,发现没有这个成员。所以这是非法的。
    你必须强制类型转换才可以
    ((Manager)e).department = "...";
      

  3.   

    如果getDetails()只是Manager的方法,而不是Employee中的方法,
    Employee e = new Manager()
    e.getDetails();
    会不会产生一个编译时错误? 因为虽然方法的调用是运行时的,但方法的检查应该是编译时的吧?
    谢谢!
      

  4.   

    你可以看看think in java的第一章,对这个解释得很清楚
      

  5.   

    e只是父类一个引用
    只要是父类的引用就可以调用子类的对象,
    我认为问题可能不在于你的department是那个类的,
    而在于它是一个private的,
    所以你需要在 Manager类中写一个给department赋值的函数。
    然后调用该函数。