PHP
,若是子類有構造函數,就不會再去調用父類的構造函數,若是子類的構造函數爲空,則取調用父類的,若是父類的構造函數爲空,那就調取父類的父類構造函數,以此類推,直接到默認的構造函數JAVA
,子類老是調用父類的構造函數,無論子類是否有構造函數(通常都有),若是子類沒有調用父類的構造函數的代碼,那默認調用的是父類的無參數的構造函數(隱式調用),若是是多重繼承,隱式調用就會很長*** 附上測試代碼 ***php
<?php class A { function __construct() { echo 33; } } class B extends A{ // function __construct() // { // echo 22; // } } class C extends B{ // function __construct() // { // echo 11; // } } new C();
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); } }