Employee是Manager的父类;有一个方法是这样定义的:
public void someMethod(Employee e){
if (e instanceof Manager){
Manager m = (Manager) e ;
m.getDepartment();
}
}
我想问的是既然已经判断了e是Manager类型的对象了,那为什么还要使用Cast进行强制转换?
public void someMethod(Employee e){
if (e instanceof Manager){
Manager m = (Manager) e ;
m.getDepartment();
}
}
我想问的是既然已经判断了e是Manager类型的对象了,那为什么还要使用Cast进行强制转换?
解决方案 »
- Hibernate 按日期查询的问题
- 面试的题目 有点小难 望高手赐教
- 探讨一下,break:continue;后的语句会不会执行。
- 一个菜鸟的问题
- META-INF文件夹是什么东西?怎么生成的?可以删掉吗?
- public String myFunction(String myName, int myAge = 10){} 的问题。
- JAVA里有没有画坐标轴的类?
- J2SE,J2EE,J2ME,EJB,有什么区别
- *******如何用JAVA实现寻找局域网内的其他机器?靠各位了,有原码更好
- jdk1.3 standard 与 jdk1.2 enterprise有何区别?
- 请问正则表达式中的\ () ' {} 怎么表示?
- 数据库里有一字段是Double型(6,2),MYSQL数据库,输出的时候,50.00怎么变在了50.0
具体可参见Thinking in Java.第一章1.6部分.
如果说你的getDepartment()方法是再Manager中定义的,那么你将Manager类的对象当作Employee
传入someMethod(Employee e)的时候getDepartment()方法的信息已经丢失了.
所以你用Employee类型的引用e是调不到getDepartment()的,即使你的对象本身是Manager类型的.
只能通过Manager类型的引用去调用getDepartment().
显然不能直接将e赋给m,因为他们属于不同的类型,所以这里需要强制Downcasting.
当然如果e引用的根本就不是Manager的这里就会拋出ClassCastException了,为了避免这样的情况发生,就先用instanceof运算符判断一下e是不是Manager类型以保证类型转换的正确性和安全性.不知道楼主看明白了没有?
即使是子类,要向下转换,也许强制类型转换。