大家好,关于继承和多态方面,请容我一问

2019-07-31 17:10:07 +08:00
 harley27
用子类构造方法构建的父类对象,
虽然没有子类独有的方法,
但可以算作是子类的实例吗?
3646 次点击
所在节点    Java
10 条回复
Sricecake
2019-07-31 18:52:55 +08:00
内存中是子类实例,编译时只是当做父类对象在用而已。
Aruforce
2019-07-31 18:54:26 +08:00
是在扩展类构造器里创建了基类的实例这个意思? b 和扩展类没任何关系:请贴代码;
Aruforce
2019-07-31 18:55:00 +08:00
@Aruforce b 和基类没任何关系
Aruforce
2019-07-31 18:55:42 +08:00
@Aruforce #3 忘了吧 只看#2
harley27
2019-07-31 21:58:57 +08:00
@Aruforce 谢谢回答,虽然我根本还看不懂
我目前只能按 Sricecake 先生的解释来理解
frienmo
2019-07-31 22:32:51 +08:00
没有“父类对象”这个概念。
马士兵的那句话 父类引用指向子类对象。
对象,object,instance 才是真正的东西。trump 只是一个你编代码时候的名字,指向了那个实例,又恰好 Java 会检查类型,不让你指向大楼。
abcbuzhiming
2019-08-01 09:30:20 +08:00
在内存里,这个对象是完整 Crazy 类型对象,具备 Crazy 类的所有成员和方法。但是在系统里,除非你显式的进行转换。那么此时这个对象对外暴露的,只有 Person 类型的所有成员。这是类型系统的限制
silkgrower
2019-08-01 16:01:00 +08:00
这个对象只能调用子类重写了的方法,其他子类的方法都是不能调的
zisway
2019-08-02 08:01:20 +08:00
我觉得如果子类没有扩展方法,那么可以看作是子类的实例,运行时,实际调用的还是子类重写的方法。如果子类有扩展方法,那么就不能算,需要进行向下转型,才可调用。
gaokevin163
2019-08-14 13:57:09 +08:00
当然是 crazy 的一个实例,你用 crazy 的构造函数 new 出来的一个实例,怎么可能是别的类型?最好的让你信服的方法就是自己在代码里动态判断一下这个类型,自己看下到底属于什么类型,就 ok 了 。这种用法其实就是所谓的向上造型,导致这个用法的原因在于多态的需要,而多态产生的原因仅仅是程序员为了实现一个接口多个方法罢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/587938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX