假如有这样的一个数组 Employee[]staff=new Employee[]
staff[0]=new Employee(...);
staff[1]=new Employee(...);
staff[2]=new Manager(...);其中Manager是Employee的子类。我想知道的是staff[2]是已经被强制转换成Employee类了吗?
是不是staff[2]属于Employee类,我调试了一下staff[2]不能使用Manager里的方法,
staff[0]=new Employee(...);
staff[1]=new Employee(...);
staff[2]=new Manager(...);其中Manager是Employee的子类。我想知道的是staff[2]是已经被强制转换成Employee类了吗?
是不是staff[2]属于Employee类,我调试了一下staff[2]不能使用Manager里的方法,
解决方案 »
- Java基础
- ClassLoader优先级问题
- table 编辑器怎么写,我新手
- 谁知道哪里有《爪哇夜未眠》的下载地址?? 很想看看这本书! 谢谢了!
- 运行时出错
- 为什么用java编写的两台计算机之间的udp连接聊天程序总是显示socket closed阿?小弟在线等,谢了!
- <<thinking in Java>>第4章 210例程 Garbage.java 不理解!!!
- 请教:“JZ006: 捕获到 IO 例外:JZ0EM: 数据结束。”的问题!在线等!!
- 还是环境变量设置问题!不好意思!!
- java applet 对文件的存取
- 关于JAVA 处理DES CBC 加密的问题,ISO8583报文
- String 和 StringBuffer在检索字符的速度效率比较?
不过如果Employee有虚函数而Manager里重载了,就可以调用Manager的重载函数
用staff[2]=new Manager(...); 前面的staff[2]只是引用,并且只是manager对象的部分引用。你要使用全部引用的话可以
Manager managerTemp = (Manager)staff[2]; 进行强制转换成对象的本身类型。
这是java里的上传型, 就是你实例了一个对象,可以只部分引用。也就是用接口名父类定义,子类型实例化
Staff[2]只是引用,类似c里的指针。
通俗点说:
Magager m = new Manager(...); m可以看成一个指针集,指针指向new Manager(...); 所得对象的所有方法和属性
staff[2]=new Manager(...);staff[2]也是一个指针集,但只指向new Manager(...); 所得对象的部分属性和方法,也就是父类所定义的属性和方法。如果是上转型对象那么就不可以调用子类中新增的方法?
那是当然,要调用的话必须强制转换成子类类型。
Manager类本身就是Employee的子类,不用强制,由于数组元素类型时Employee类型,所以你不能直接调用
Manager类里面的方法,因,如果子类重载或者重写了父为它只能看到Employee里面的方法类中的方法,那么调用的时候,是调用子类Manager中的方法,Manager manger = (Manager)employee; 强制转换之后,就可以调用manager里面的方法啦。