“父类的引用指向子类的对象”怎么理解?

这是JAVA和.NET都有的一句经典的语句?谢谢各位能详细的说说。谢谢了!!!... 这是JAVA和.NET都有的一句经典的语句?谢谢各位能详细的说说。 谢谢了!!! 展开
 我来答
石家庄第678个
2014-10-25 · TA获得超过170个赞
知道答主
回答量:125
采纳率:0%
帮助的人:173万
展开全部
父类引用指向子类对象,也就是向上转型upcasting, 向上转型概念是:把子类对象当做父类对象来使用, 两个类Animal(动物)和Dog(狗),Dog从Animal继承,Animal是父类,Dog是子类,现在我在main方法中这样写: Animal a = new Dog(); main方法开始执行后,栈内存中分配一个父类Animal的引用变量a, new了一个子类Dog的对象位于堆内存,现在a这个引用变量指向了这个对象,这就是 父类引用指向子类对象! 子类的构造过程中要先构造父类对象,在堆内存的这个子类对象Dog的内部有一个父类Animal对象,所以 可以说子类对象比父类对象大,子类对象里面包含了一个父类对象,这就是有继承关系存在的情况下,你实例化一个子类对象时,内存中的情况. 现在Animal a = new Dog(); 向上转型, 通过引用a我只可以访问父类对象的内容(属性和方法),我不能访问Dog这个子类对象自己定义的特有的内容, 你虽然在内存中确实是一个子类Dog对象,但是我父类引用指向了你,你虽然确实是一只狗,但是我就把你当成是动物看!怎么地吧! 说白了我这个Animal引用a指向你Dog对象,但是我只能看到位于子类对象里面的那个父类对象, 所以,正是因为基类不会大于导出类的接口,所以向上转型是安全的! 另外,父类引用指向子类对象是多态的3个必要条件之一 举个例子: void run(Animal a) { } 方法run的参数是Animal类型, 当我调这方法的时候, Dog d = new Dog(); run(d); 这就是父类引用指向子类对象,人家要求一个动物,我往里仍只狗进去,可以,没问题.
66瞱撷您
2014-10-25 · 超过69用户采纳过TA的回答
知道答主
回答量:122
采纳率:0%
帮助的人:135万
展开全部
就是多态问题 比如有个Person类,有个Eat()方法,子类有Teacher,Student,重写了基类的Eat()方法 声明一个Person[] ps={new Teacher(),new Student}; 当用循环调用时 foreach(Person p in ps) { p.Eat(); } 其中p在运行时就分别指的是new Teacher()和new Student()两个子类对象实例
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式