Employee是Manager的父类;有一个方法是这样定义的:
public void someMethod(Employee e){
     if (e instanceof Manager){
          Manager m = (Manager) e ;
          m.getDepartment();
     }
}
我想问的是既然已经判断了e是Manager类型的对象了,那为什么还要使用Cast进行强制转换?

解决方案 »

  1.   

    lz你这是向下造型,目的是使得父类对象具有子类的属性,属于不安全的转换,所以需要强制.
    具体可参见Thinking in Java.第一章1.6部分.
      

  2.   

    instanceof运算符只是判断你的对象是不是Manager类型的,并没有做任何类型转换的事情.
    如果说你的getDepartment()方法是再Manager中定义的,那么你将Manager类的对象当作Employee
    传入someMethod(Employee e)的时候getDepartment()方法的信息已经丢失了.
    所以你用Employee类型的引用e是调不到getDepartment()的,即使你的对象本身是Manager类型的.
    只能通过Manager类型的引用去调用getDepartment().
    显然不能直接将e赋给m,因为他们属于不同的类型,所以这里需要强制Downcasting.
    当然如果e引用的根本就不是Manager的这里就会拋出ClassCastException了,为了避免这样的情况发生,就先用instanceof运算符判断一下e是不是Manager类型以保证类型转换的正确性和安全性.不知道楼主看明白了没有?
      

  3.   

    instanceof运算符是用来判断的。
    即使是子类,要向下转换,也许强制类型转换。
      

  4.   

    在Employee里没有getDepartment()方法,如果有这个方法,不需要down cast