当前位置:  技术问答>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类型。不知对否?
为什么会是这样?

|
这么写是合法的

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

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

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

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

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,