解决方案 »
- java中Could not get shell folder ID list错误
- 怎样遍历JDialog中的控件 请各位高手帮个忙
- 请教高手!读TXT文档。
- 求助:怎样在组播中使用setReuseAddress()方法
- aop解决异常日志集中处理问题
- 二维条码打印问题:已知代表二维图像的字节数组,怎么显示出图像?
- 求...解... Overload和Override的区别? Overload是语言的特性, Override是面向对象多态的体现
- 怪怪的
- 关于java对目录、文件的操作问题?
- 我找了个ConnectionPool,请问怎么用呢?
- 关于用异或的方式,进行数组元素的位置互换,毕老师说可以,我的异或方式打印结果不对请指教
- java中利用BufferStrategy绘制图片怎么输出到BufferedImage中?
你的理解没有问题,new才会去开辟内存,创建一个空对象,构造函数只是将这个对象初始化一下而已。
从图中可知,压根没有父类对象,只有子类对象,而且this完全引用这个对象,super只是引用了这个对象中从父类继承来的成员,和子类定义(可见的)的成员方法部分的数据,也就是说,除了super不能访问子类定义的成员变量之外,super和this是同一个对象,这可以通过toString()方法验证(如果子类没有重写toString()方法,则调用父类的该方法,如果父类没有,再找父类的父类,直到Object的toString()方法)。Object类toString方法:public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}getClass 和 getName 都是Object类的方法。总之,没有super这个对象,他只是引用了子类对象的一部分数据,所有无法输出super。
那么为什么能输出super.toString()呢,原因在前面图中,这个调用过程是先试图调用从子类对象中直接父类继承的toString方法(注意:super.toString()是显式调用),如果没有则调用子类的toString方法,没有则向上追述知道Object。以上仅是个人见解,真假难辨,欢迎讨论。
从图中可知,压根没有父类对象,只有子类对象,而且this完全引用这个对象,super只是引用了这个对象中从父类继承来的成员,也就是说,除了super不能访问子类定义的成员之外,super和this是同一个对象,这可以通过toString()方法验证(如果子类没有重写toString()方法,则调用父类的该方法,如果父类没有,再找父类的父类,直到Object的toString()方法)。Object类toString方法:public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}getClass 和 getName 都是Object类的方法。总之,没有super这个对象,他只是引用了子类对象的一部分数据,所有无法输出super。
那么为什么能输出super.toString()呢,原因在前面图中,这个调用过程是先试图调用从子类对象中直接父类继承的toString方法(注意:super.toString()是显式调用),如果没有则向上追述知道Object。
class F extends E{} class E extends D{} class D extends C{} class C extends B{} class B extends A{} class A{}
建立A对象时那岂不是同时创建了BCDEF对象???
abstract class A{} class B extends A{} new B()时不会创建A对象吧(抽象类不能有对象)我觉得是这样的,new子类对象时,先开辟一片内存空间,先给父类的成员变量安排好内存单元,然后子类自己的数据接着来分配给予内存单元,相当于父类数据与子类数据合租一个房子,房子是子类的有没有大神给予强有力论证来解答,众说纷纭啊??我两个老师都非常直接爽快的说“会”,气死我了。
一个对象可以理解为一个房子,而一个类只是规定了什么地方要放什么东西,比如客厅要放沙发,餐厅要有餐桌
创建一个新对象,就是建造一栋新房子,如果你不去初始化对象,那么这个房子就是空的,没有任何装饰家具,你也不能用它来做任何有意义的事(当然这只是个比喻,空房子不能说没有用)
当调用构造函数时,才会真正让这个对象有意义,那就是布置这个房子,布置这个房子有很多设计师,子类和父类就是两个设计师,他们之间的关系可以理解为父类设计师是子类设计师的指导,首先子类会让父类先来,父类说他要A B C D E等等,于是就叫人搬来这些东西放在房子里,父类布置好了,子类就来布置了,子类就会继续在房子里添置家具等等,有时候父类和子类会有冲突,比如父类说瓷砖地板好,子类说木地板好,这时候以子类为准,因为最终这个房子是给子类的,父类只是一个顾问指导而已,这就相当于方法重写。所以如果你说创建一个子类对象会不会同时也创建了父类对象,那答案肯定是没有
说有的如果他的意思是这个子类对象在某个时刻完全是一个父类对象,因为那个时刻他具备了父类对象所有的特征,但不具备子类的特征,那还是可以接受的,但这个过程只会创建一个对象,如果说有的认为创建了两个或者更多的对象,那肯定是错误的