黑马程序员技术交流社区

标题: 子类构造函数使用super的问题 [打印本页]

作者: 梵天的梦    时间: 2014-3-13 12:30
标题: 子类构造函数使用super的问题
本帖最后由 梵天的梦 于 2014-3-13 12:33 编辑

如果class A extends B,A的构造方法中用super()调用了父类的构造函数, 那么在new A对象后内存中是不是同时有了A对象和B对象呀?
作者: 王浩龙    时间: 2014-3-13 12:46
  1. class B
  2. {
  3.         int num ;
  4.         B(){
  5.                 num= 60;
  6.                 System.out.println("fu run");
  7.         }
  8.         B(int  x){
  9.                 this();
  10.                 System.out.println("fu ...."+x);
  11.         }       
  12. }

  13. class A extends B{
  14.         A(){
  15.                 super(4); //子类每一个构造函数内的第一行都有一句隐式super();当调用带参数的构造函数时就不再调用无参构造函数
  16.                 System.out.println("zi run");
  17.         }
  18. }
  19. class  Demo
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 A a = new A(0);
  24.                 System.out.println(z.num);
  25.         }
  26. }
复制代码
在new A 对象之后内存中只有A对象,super()只是调用了A的父类B的空参数构造函数
请看下面对super()用法的详解

作者: 梵天的梦    时间: 2014-3-13 13:25
王浩龙 发表于 2014-3-13 12:46
在new A 对象之后内存中只有A对象,super()只是调用了A的父类B的空参数构造函数
请看下面对super()用法 ...

多谢了。。。
作者: nicholyx    时间: 2014-3-14 12:29
我自己新开了帖子说了自己的理解,但是不知道是否正确,可以过来看看。
http://bbs.itheima.com/thread-109692-1-1.html
作者: 谜燕    时间: 2014-3-14 14:18
当然不会,创建谁的的对象就只能有谁的对象,super语句是隐式的,默认是空参数的,他的作用是参考父类如何初始化的,就像儿子跟着父亲学本领,父亲怎么做,他就怎么做,是一个参照。
作者: 1014917278    时间: 2014-3-14 14:24
楼上答得太贴切了,只有new之后才会生成对象的,super()只是会参考父类
作者: syusikoku    时间: 2014-3-14 17:14
不是。你只是调用父类的构造方法。因为父类的构造方法要先执行。它要先对父类中的元素进行初始化




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2