您好、欢迎来到现金彩票网!
当前位置:21点 > 子类 >

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

发布时间:2019-06-27 05:00 来源:未知 编辑:admin

  我又试,把父类用抽象abstract修饰,按理说abstract累不能实例化吧,肯定不能得到父类中的a属性,结果还是一样的.

  是不是创建子类对象,肯定会出现一个父类的对象?展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部不会产生父类对象,只是用了父类的构造函数而已,并不是用到构造函数就会产生对象,构造函数只是起对象初始化作用的,而不是起产生对象作用的,如果new A();即只有new语句才会产生父类A的对象。

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

  其实你可以这么理解 创建了一个子类对象时,在子类对象内存中,有两份这个变量,一份继承自父类,一份子类。

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

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

  你自己想想,如果产生父类对象,如果父类是抽象类,抽象类允许产生对象吗?所以这种说法不严谨

  A test = new B();这行代码表明现在的test是父类引用,但是指向的是子类对象。子类对象在构造的时候会先调用其父类的构造方法,也就是说,在执行new B()的时候实际上先执行的是new A(),这样int a = 1;这条语句就被执行了,test引用虽然指向的是子类的对象,但是test对外仍然是A类型,故当你打印test.a的时候,就是父类A的属性a的值。只有当父类引用指向子类对象,且子类中重写了父类中的方法时,这种情况下,调用父类的被其子类重写的方法才会实际去执行被子类重写过的方法体,这就是Java中的多态,我想你不能理解的地方应该就是在这里了。多态的前提是:父类引用指向子类对象,且子类重写了父类中的方法。据我目前的理解(不一定是对的,哪位大侠如果明确的觉得错了请帮忙指正)属性应该是不存在什么多态的。希望能帮到你。

  简单的理解为Java不支持属性字段覆盖(override),只支持方法覆盖,

  换句话说,多态的含义是运行时对象行为发生了改变,但属性字段不发生改变,因为属性字段封装了数据,数据只能由方法或者说对象的行为发生改变

http://korinkorin.com/zilei/102.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有