PHP
,如果子类有构造函数,就不会再去调用父类的构造函数,如果子类的构造函数为空,则取调用父类的,如果父类的构造函数为空,那就调取父类的父类构造函数,以此类推,直接到默认的构造函数JAVA
,子类总是调用父类的构造函数,不管子类是否有构造函数(一般都有),如果子类没有调用父类的构造函数的代码,那默认调用的是父类的无参数的构造函数(隐式调用),如果是多重继承,隐式调用就会很长
*** 附上测试代码 ***
class BaseClass { BaseClass() { System.out.println("HELLO"); }}class SuperClass extends BaseClass{ private int n; SuperClass(){ System.out.println("SuperClass()"); } SuperClass(int n) { System.out.println("SuperClass(int n)"); this.n = n; }}// SubClass 类继承class SubClass extends SuperClass{ private int n; SubClass(){ // 自动调用父类的无参数构造器 System.out.println("SubClass"); } public SubClass(int n){ super(300); // 调用父类中带有参数的构造器 System.out.println("SubClass(int n):"+n); this.n = n; }}// SubClass2 类继承class SubClass2 extends SuperClass{ private int n; SubClass2(){ super(300); // 调用父类中带有参数的构造器 System.out.println("SubClass2"); } public SubClass2(int n){ // 自动调用父类的无参数构造器 System.out.println("SubClass2(int n):"+n); this.n = n; }}public class TestSuperSub{ public static void main (String args[]){ System.out.println("------SubClass 类继承------"); SubClass sc1 = new SubClass(); SubClass sc2 = new SubClass(100); System.out.println("------SubClass2 类继承------"); SubClass2 sc3 = new SubClass2(); SubClass2 sc4 = new SubClass2(200); }}