规则如下:
1.子类的构造过程必须调用父类(基类)中的构造方法。
简单理解:子类继承了父类,子类创建出来的同是也必须把父类创建出来。(没有父亲,哪来儿子)
2.子类可以在自己的构造方法中使用super(argument_list)调用父类(基类)的构造方法。
如果调用了super,必须写在子类构造方法的第一行。
3.如果子类的构造方法中没有显示的调用父类的构造方法(子类构造方法中没有写super),则系统默认调用父类无参的构造方法。
4.如果子类在构造方法中既没有显示调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。
class Person{ public String name; public int age; // 有参的构造方法 public Person(String name, int age) { this.name = name; this.age = age; } } class Student extends Person{ //规则一: //子类的构造方法中必须调用父类的构造方法 public Student(String name, int age, String stuNum, String school) { //规则二: //super必须位于子类构造方法的第一行! super(name, age); this.stuNum = stuNum; this.school = school; } public String stuNum; public String school; //规则四: //这里由于构造方法中既没有显示调用父类Person的构造方法,父类又没有无参的构造方法 //所以编译器报错 public Student(){ } } public class Test { public static void main(String[] args) { } }
class Person{ public String name; public int age; // 有参的构造方法 public Person(String name, int age) { this.name = name; this.age = age; } //添加无参的构造方法 public Person(){ System.out.println("我是父类的无参构造方法"); } } class Student extends Person{ public String stuNum; public String school; //第三条规则 //这里由于构造方法中没有显示调用父类Person的构造方法,系统默认调用父类的无参构造方法 public Student(){ } } public class Test { public static void main(String[] args) { Student s = new Student(); } }
测试结果:我是父类的无参构造方法