子类可以继承父类所有的变量和方法,但是有没有想过子类为何能继承它们,它们是凭空继承而来的么?当然不是,其实每当调用子类构造器new一个子类对象的时候,都要先调用父类的构造new一个父类对象,父类对象隐式的存在于子类中,子类是这样继承父类的变量和方法的,以我中有你的方式,所以子类构造器都必须显示或者隐式调用父类构造器,如果不能调用则该子类无效。另外还要补充的一点是,子类构造器调用父类构造器的方式类似于递归,也就是说子类先调用父类,然后父类再调用它的父类,以此类推一直到一个没有父类的类为止,最先用这个没有父类的类的构造器生成对象,再依次往子类方向生成对象。
tip:
子类构造器中默认调用的是父类中的无参构造器,当父类构造器没写或者只有无参构造器时,子类构造器写不写父类的构造器都行;
当父类中只有有参构造器时,则子类构造器中必须指明父类构造器;
当父类中有无参构造器又有有参构造器时,子类构造器中若不写则是默认调用父类无参构造器,若要调用父类有参构造器则需要指明。