当前位置: 技术问答>java相关
为什么会是这样????
来源: 互联网 发布时间:2015-03-02
本文导语: public class Employee extends Object and public class Manager extends Employee Employee e = new Manager() e.department = " Finance " ; // illegal e.getDetails();//ligal department和getDetail分别是Manager中的域和方法,而不是Employee中的。 据解...
public class Employee extends Object and
public class Manager extends Employee
Employee e = new Manager()
e.department = " Finance " ; // illegal
e.getDetails();//ligal
department和getDetail分别是Manager中的域和方法,而不是Employee中的。
据解释e在编译时是Employee类型,而在运行时是Manager类型。不知对否?
为什么会是这样?
public class Manager extends Employee
Employee e = new Manager()
e.department = " Finance " ; // illegal
e.getDetails();//ligal
department和getDetail分别是Manager中的域和方法,而不是Employee中的。
据解释e在编译时是Employee类型,而在运行时是Manager类型。不知对否?
为什么会是这样?
|
这么写是合法的
只要department和getDetails()是子类Manager继承父类Employee的,就通过
只要department和getDetails()是子类Manager继承父类Employee的,就通过
|
那是因为对于编译器来说,在那两行的e只是一个Employee的对象,不认为是一个Manager对象(当然在运行过程中它的确是一个Manager对象)
所以e.department,编译器只会在Employee中查找,发现没有这个成员。所以这是非法的。
你必须强制类型转换才可以
((Manager)e).department = "...";
所以e.department,编译器只会在Employee中查找,发现没有这个成员。所以这是非法的。
你必须强制类型转换才可以
((Manager)e).department = "...";
|
你可以看看think in java的第一章,对这个解释得很清楚
|
e只是父类一个引用
只要是父类的引用就可以调用子类的对象,
我认为问题可能不在于你的department是那个类的,
而在于它是一个private的,
所以你需要在 Manager类中写一个给department赋值的函数。
然后调用该函数。
只要是父类的引用就可以调用子类的对象,
我认为问题可能不在于你的department是那个类的,
而在于它是一个private的,
所以你需要在 Manager类中写一个给department赋值的函数。
然后调用该函数。
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。