永发信息网

java 子类实例化时是否同时存在一个父类对象.

答案:5  悬赏:10  手机版
解决时间 2021-03-12 19:05
java 子类实例化时是否同时存在一个父类对象.
最佳答案
不会产生父类对象,只是用了父类的构造函数而已,并不是用到构造函数就会产生对象,构造函数只是起对象初始化作用的,而不是起产生对象作用的,如果new A();即只有new语句才会产生父类A的对象。

变量是静态绑定 ,方法是动态绑定。 这里面变量在编译期间实现了变量调用语句与变量定义赋值语句的绑定,绑定的自然是父类的,因为调用时类型是父类的,所以值是父类中定义的值

其实你可以这么理解 创建了一个子类对象时,在子类对象内存中,有两份这个变量,一份继承自父类,一份子类。
绝对不会产生父类对象,父类中的成员被继承到子类对象中,用指向子类对象的父类引用调用父类成员,只不过是从 子类对象内存空间中找到那个被继承来的父类成员,也就是说实质是用子类对象调用变量a,这样就可以解释成员必须通过对象调用的规定,只不过这时调用的是子类对象中的继承自父类的a(子类对象中有两个a,一个继承自父类,一个属于自己)

哎,话说的有些乱。 这个问题也困惑我很久,上网查询发现很多人是错误的,最后找到几篇好的文章才明白,可能很多java老手也都会犯“产生父类对象”这个错误,最近才搞明白。

你自己想想,如果产生父类对象,如果父类是抽象类,抽象类允许产生对象吗?所以这种说法不严谨
全部回答
第一,实例化子类不会实例化父类,所以不存在一个父类对象;
第二,构造方法只是为变量赋值,只是赋值;
第三,变量是编译期间静态绑定的。
这其实是个多态的问题,
简单的理解为Java不支持属性字段覆盖(override),只支持方法覆盖,
换句话说,多态的含义是运行时对象行为发生了改变,但属性字段不发生改变,因为属性字段封装了数据,数据只能由方法或者说对象的行为发生改变
这和c#有点不同,c#字段也可以override
A test = new B();这行代码表明现在的test是父类引用,但是指向的是子类对象。子类对象在构造的时候会先调用其父类的构造方法,也就是说,在执行new B()的时候实际上先执行的是new A(),这样int a = 1;这条语句就被执行了,test引用虽然指向的是子类的对象,但是test对外仍然是A类型,故当你打印test.a的时候,就是父类A的属性a的值。只有当父类引用指向子类对象,且子类中重写了父类中的方法时,这种情况下,调用父类的被其子类重写的方法才会实际去执行被子类重写过的方法体,这就是Java中的多态,我想你不能理解的地方应该就是在这里了。多态的前提是:父类引用指向子类对象,且子类重写了父类中的方法。据我目前的理解(不一定是对的,哪位大侠如果明确的觉得错了请帮忙指正)属性应该是不存在什么多态的。希望能帮到你。追问你的意思是,创建一个子类,同时也创建了一个父类,,可以这么理解吗?追答可以这样理解吧,创建子类对象个过程中也创建了一个匿名的父类对象。
A test = new B();
关键在这一句,对象的上转型对象。
父类型 引用 = new 子类型();
父类型的引用指向子类的一个实例。
这里需要掌握的东西:
1 内存模型
2 extends权限 public protected private friendly
3 什么叫重写
4 this 与 super
5 RTTI 与 object slicing
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何制作黑巧克力?
张庭经络健身馆在什么地方啊,我要过去处理事
如果要写历史架空小说,连开头和结尾都可以不
为什么古装剧里女扮男装永远认不出,但要是头
大阿罗汉是从哪来的?他们入轮回干什么?为什
荆沙大道到火车站怎么走
南广路在哪里啊,我有事要去这个地方
.浴缸要怎么挑选啊?有什么好的品牌可以推荐
求日本原版《哆啦a梦》主题曲《ドラエもんの
柏悦小酒馆这个地址在什么地方,我要处理点事
大卫和丽丽在干什么翻译
从乳胶漆漆的味道大小,能判断出是否环保吗?
富新生汽车配件有限公司地址在什么地方,想过
嘴巴往前凸,牙往前凸,怎么办
湖心亭看雪和江雪在写作背景、写作手法、思想
推荐资讯
vivo x 510t怎么调震动大小呀?
打麻将换牌换不成,想学绝技
笔记本的APU A10-7850k和FX-8800p哪个好
『灌水』老司机告诉我看门狗2这个打折能入么
山西护理类专升本
已知一个直角三角形斜边和底边夹角是60度,高
公务员干部履历表入团时间网了怎么办
丰台区卢沟桥的邮编是多少?
FNH患者饮食要注意哪些
为什么山地车都没有挡泥板
新六艺指什么
非全日制上课时间是在什么时候吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?