首页新闻找找看学习计划

java子类调用父类构造函数的问题?

0
悬赏园豆:20 [已解决问题] 解决于 2018-03-20 15:33

本人刚接触java,对子类调用父类构造函数的问题有点迷糊,写了代码验证了自己的想法但不知道原因。望得到老师指导,感激!


我的理解是子类在创建对象时会先调用父类的相关构造函数,再调用子类自身的构造函数,不知道我的理解对不对。代码如下:

class ExampleExtend
  {
      int ex1,ex2;
      ExampleExtend()
             {
      System.out.println("这是一个父类的无参构造函数;");
      }
      ExampleExtend(int ex1,int ex2)
     {
      this.ex1=ex1;
      this.ex2=ex2;
      System.out.println("ex1="+ex1+"\n"+"ex2="+ex2);
      System.out.println("这是一个父类的2参数构造函数;");

    }
    }

class Extend extends ExampleExtend
  {
    Extend()
      {
        super(3,4); //为什么加上super以后就不执行父类的构造函数呢?
        System.out.println("子类的构造函数结束");
      }
public static void main(String[] args) 
  {
    Extend A = new Extend();
  }
}

Question:

在没有红色行代码的时候,程序先执行了父类的无参构造函数,接着执行了子类的构造函数;
当加上红色行代码后,虽然人为的调用了父类的2参构造函数,可是为什么父类的无参构造函数没有先执行?毕竟我创建的A类对象不传参。

另外,即使我的子类构造函数也传递2个参数,在没有红色行代码的时候,程序依旧先执行父类的无参构造函数,这是为什么?谢谢!

DKwinner的主页 DKwinner | 初学一级 | 园豆:185
提问于:2018-03-20 11:35
< >
分享
最佳答案
0

初始化对象的时候,会默认先调用父类的无参构造方法,然后再调用子类的构造方法。实际上是子类构造方法的首行隐含了一个“super();” 你现在显式的加入了“super(2,3)” 于是会调用父类的有参构造方法,而不去调用无参构造方法。第二个问题也很好理解,当你不写显式的加入“super(2,3)”那个隐藏的"super()"就会被调用。

收获园豆:20
Shendu.CC | 小虾三级 |园豆:1811 | 2018-03-20 11:48

明白了,谢谢!

DKwinner | 园豆:185 (初学一级) | 2018-03-20 15:34
其他回答(1)
0

子类中如果你不手动调用父类的构造方法,系统就会自动调用父类的无参构造方法。像你红色字体,如果手动调用了父类的构造方法,不管是有参的还是无参的,父类都不会再自动调用了

西红柿里没有番茄 | 园豆:533 (小虾三级) | 2018-03-20 14:51

明白了,谢谢!

支持(0) 反对(0) DKwinner | 园豆:185 (初学一级) | 2018-03-20 15:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册