java代码:

  class Person

  public Person

  }

  class Student extends Person

  public Student

  public Student

  }

  class Test

  }

  /

  =======================================

  输出如下:

  E:“JavaWorkjava Test

  st1:

  person无参数构造函数

  student 无参数的构造函数

  ---------------------------

  st2:

  person无参数构造函数

  student 3 参数的构造函数

  ---------------------------

  st3:

  person 2 参数的构造函数

  student 4 参数的构造函数,super.

  说明了创建一个子类的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统将不会给它创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器将会报错,但假如在子类的构造函数中指定用父类的带参数的构造函数的时候,或者在父类中加一个无参数的构造函数,就不会报错。

  =============================================

  我们假设A是B的父类,B是A的子类。

  1、假如程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,假如用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。

  2、子类B实例化时会自动调用父类A的默认构造函数,所以假如A的默认的无参数的构造函数为private,则编译器会报错,而假如A没有提供默认的无参数的构造函数,而提供了其他类型的构造函数,编译器同样会报错,因为B找不到A的默认无参数构造函数。所以,我们最好给父类A提供一个无参数的构造函数。

  3、或者在B的构造函数中显示的调用父类A的有参构造函数。