本帖最后由 零度非安全 于 2017-4-18 12:43 编辑
你要记住这一点,不管怎样,子类构造器总会调用父类构造器一次,还有一个就是它们都是 Object 的子类。
我跟你补充点东西,如下:
子类构造器 调用
父类构造器 分以下三种情况,希望楼主能记在心里 ^_^!
1. 子类构造器执行体第一行使用
super 显示调用父类构造器
2. 子类构造器执行体第一行使用
this 显示调用本类重载构造器
3. 子类构造器执行体既没有
super 调用,也没有
this调用,那么系统会隐式调用父类无参数的构造器
那好,我们来看下你发的这个问题,以下是我的分析:
你用 B 类去初始化一个实例对象 b,传入参数 100,则接下来会调用 B 类带参的构造器来初始化 b,B 类继承 A 类
B 是 A 的子类,B 类中的构造器既没有
super 调用,也没有
this 调用,那么就符合上面我说的第三种情况,系统会
隐式调用父类无参数的构造器,即 A 类无参数的构造器,但是,重点来了,你给出的 A 类没有无参构造器,那么就
会报错,错误是什么呢?我们来看下:
Implicit super constructor A() is undefined. Must explicitly invoke another constructor
这个意义是说构造器 A() 没有被定义,那么我就把光标处注释去掉,则如下没有报错
这是一种解决方案,还有一种解决方案就是在子类 B 中构造器中加上 super(m); 这句也能解决,如下:
也就是调用了父类带参的构造器,而没有调用无参的构造器。
想一想:
其实在第三点中说系统会隐式调用父类无参数的构造器,那就说明在 B 带参数的构造器中省略了 super(); 这句
总结:
super(); 没有参数,则会调用 A 类无参构造器,而 A 类没有,所以会报错,你在 super(); 给一个参数 m,则不
报错,至于结果为 2,我想你知道,这我就不用多说,这么多字,纯手打,希望楼主能明白!加油 ^_^!!!