JAva継承後構造関数の継承メカニズム

6830 ワード

最近javaベースのものを復習しています.継承後のコンストラクション関数の継承が興味深いことを発見し、テストを行いました.
  • テスト1-親がコンストラクション関数をアクティブに作成しない場合、サブクラスのコンストラクション関数の作成に制限はありません.
  • テスト2-親がコンストラクション関数を含まない場合、子のコンストラクション関数の作成に制限はなく、親のコンストラクション関数を先に実行します.
  • テスト3-親がパラメトリックコンストラクタを含むコンストラクタを作成する場合、サブクラスがコンストラクタを作成するには、super親関数を先に作成し、親のコンストラクタを先に実行する必要があります.
  • テスト4-親が複数のパラメトリック構造関数を作成する場合、子クラスが構造関数を作成するには、まずsuperが指定した親関数が必要です(親がパラメトリック構造関数を含まない場合、子クラスはsuper親関数をテスト2と同じにしなくてもいい).

  • テスト1-親がコンストラクション関数をアクティブに作成しない場合、子のコンストラクション関数の作成に制限はありません。


    public class Father {
    
    }

    サブクラス
    public class Child extends Father {
    
        public Child(String a, int b) {
    
            System.out.println(" ");
        }
        public static void main(String[] args) {
    
            Child t3 = new Child("xx",1);
    
        }
    }

    結果
     

    テスト2-親がコンストラクション関数を含まない場合、子のコンストラクション関数の作成に制限はなく、親のコンストラクション関数を先に実行します。


    public class Father {
    
        public Father() {
            System.out.println(" ");
        }
    }

    サブクラス
    public class Child extends Father {
    
        public Child(String a, int b) {
    
            System.out.println(" ");
        }
        public static void main(String[] args) {
    
            Child t3 = new Child("xx",1);
    
        }
    }

    結果
     
     

    テスト3-親がパラメトリック構造関数を作成する場合、子の構造関数を作成するにはsuper親関数を先に実行し、親の構造関数を先に実行する必要があります。


    public class Father {
    
        public Father(int a) {
            System.out.println(" ");
        }
    }

    サブクラス
    public class Child extends Father {
    
        public Child(String a, int b) {
            super(1);
            System.out.println(" ");
        }
        public static void main(String[] args) {
    
            Child t3 = new Child("xx",1);
    
        }
    }

    結果
     
     

    テスト4-親が複数のパラメトリック構造関数を作成する場合、子が構造関数を作成するには、superで指定した親関数を先に作成する必要があります(親がパラメトリック構造関数を含まない場合、子はsuper親関数をテスト2と同じにしなくてもいいです)。


    public class Father {
    
        public Father(int a) {
            System.out.println(" 1");
        }
        public Father(String b) {
            System.out.println(" 2");
        }
    }

    サブクラス
    public class Child extends Father {
    
        public Child(){
            super("a");
            System.out.println(" 2");
        }
        public Child(String a, int b) {
            super(1);
            System.out.println(" 1");
        }
        public static void main(String[] args) {
    
            Child t3 = new Child("xx",1);
            Child t4 = new Child();
    
        }
    }

    結果
     1
     1
     2
     2

    以上のテストを総合して、以下の結論を得た。


    1.親がコンストラクション関数を自発的に作成しない場合、または親が参照していないコンストラクション関数を作成しない場合、子クラスは親のコンストラクション関数を考慮しなくてもよい.2、子クラスが親クラスのパラメトリック構造関数を継承する必要がある場合はsuperコマンドを使用する必要があります(親クラスに複数のパラメトリック構造関数が含まれている場合はパラメータに基づいてsuperコマンドを使用します).3、親クラスが構造関数を確立し、パラメータが含まれている場合は、子クラスはsuperコマンドを使用する必要があります.