A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hmyuanqi 中级黑马   /  2014-8-18 09:04  /  1010 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       学习了继承,在做基础测试的时候遇到一个问题。他说几个类中只有默认的构造函数,问怎么证明子类创建对象的时候是否会访问父类的构造函数?本来清醒的,一下糊涂了
       默认构造函数是什么?是不是空参数的构造函数就是默认构造函数?还是不要重写构造函数,当创建对象时,虚拟机给类添加的那个空参数的构造函数才是默认函数?如果我自己定义了一个空参数的构造函数是不是默认构造函数呢?

8 个回复

倒序浏览
一个类中如果没有构造函数、虚拟机会自动的给这个类添加一个无参构造函数,这个就是默认的构造函数、如果类中存在构造函数、将不会添加默认的构造函数、想证明子类创建对象的时候是否会访问父类的构造函数、很简单、子类继承父类,在父类的无参构造函数中 打印一句话、再创建子类对象、控制台会打印这句话。

点评

这个靠谱  发表于 2014-8-18 14:15
回复 使用道具 举报
你自己定义一个构造   比如 public A(){}   ----> 默认构造函数不存在了. 当然 你也可以叫它为默认构造函数
在比如 一个类 俩构造函数 public A(int x,int y){} , public A(int x){}  这样情况 默认构造函数不存在了, 没有默认构造函数   
  
回复 使用道具 举报
默认构造函数 是 无参数的  你没有  编译器给你创建 你有 就用你的....  
回复 使用道具 举报
楼上正解                                                                     
回复 使用道具 举报
默认的构造函数就是类中存在的一个隐式的空参数的构造函数。如果是你自己定义的空参数构造函数那就不是默认的构造函数了,属于手动声明。。。
回复 使用道具 举报
执行顺序 永远是先 走 父类 ----> 父亲不存在 儿子怎么会有呢?   初始化顺序 除静态变量/函数/代码块外    成员变量是第一加载 ---- 然后是 构造代码块 构造函数

执行顺序.png (134.89 KB, 下载次数: 58)

执行顺序.png

涉及父类调用00.png (140.2 KB, 下载次数: 60)

涉及父类调用00.png

设计父类调用01.png (137.22 KB, 下载次数: 74)

设计父类调用01.png
回复 使用道具 举报
要证明子类会访问父类中默认构造方法很简单,子类中的super指向随便写个有参数的构造方法(当然这个带参构造方法父类中不存在),程序报错就证明,子类要访问父类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马