ホームページ >Java >&#&チュートリアル >Java の継承、サブクラスが親クラスのコンストラクターを継承するかどうか

Java の継承、サブクラスが親クラスのコンストラクターを継承するかどうか

PHP中文网
PHP中文网オリジナル
2017-06-22 10:27:451763ブラウズ

Java の継承では、サブクラスが親クラスのコンストラクターを継承するかどうか

Java の継承では、サブクラスは親クラスのコンストラクターを継承しませんが、(暗黙的または明示的に) call する必要があります

次の例を見てください:

public class TestExtends {
    public static void main(String[] args) {
        SonClass s = new SonClass(66);
    }
}

class FooClass{
    public FooClass() {
        System.out.println(100);
    }
    public FooClass(int count) {
        System.out.println(count);
    }
}

class SonClass extends FooClass{
    public SonClass() {
    }
    public SonClass(int c) {
        System.out.println(1234);
    }

}

実行結果:

100
1234

次に、なぜそのような結果が生成されるのかを分析してください:
プログラムは行 SonClass s = new SonClass(66); を実行しています。 SonClass s = new SonClass(66);这行时,调用

public SonClass(int c) {
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}

因此子类在执行上面的构造方法时,等价于执行了下面的代码:

public SonClass(int c) {
    super(); // 必须在第一行调用,否则不能编译
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}

所以结果为:
100 1234

接下来介绍另外一种情况(显式调用),如果子类构造函数是这样写的:

public SonClass(int c) {
    super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了
    System.out.println(1234);
}

执行结构是:
2 1234

总结:

  • 构造函数是不能继承的,只是用来在子类调用,(如果父类没有无参构造函数,创建子类时,必须在子类构造函数代码体的第一行显式调用父类的有参数构造函数,否则不能编译);

  • 如果父类没有有参构造函数,那么在创建子类时可以不显式调用父类构造函数,系统会默认调用父类的无参构造函数super()rrreee

    を呼び出すとき、したがって、サブクラスが上記のコンストラクター メソッドを実行すると、次のコードを実行するのと同じになります:
  • rrreee
  • したがって、結果は次のようになります:

    100 1234

  • Nextこの場合 (明示的な呼び出し)、サブクラス コンストラクターが次のように記述されている場合:
rrreee
実行構造は:

2 1234

概要:

    • コンストラクターは継承できず、サブクラスを呼び出すためにのみ使用されます (親クラスにパラメーターのないコンストラクターがない場合は、サブクラスを作成するときにそれが存在する必要があります)サブクラス コンストラクターのコード本体 親クラスの最初の行は、親クラスのパラメーター化されたコンストラクターを明示的に呼び出します。そうしないとコンパイルできません)

    • 親クラスにパラメーター化されたコンストラクターがない場合は、次のようにする必要はありません。サブクラスを作成するときに、親クラスのコンストラクターを明示的に呼び出します。システムは、親クラスのパラメーターのないコンストラクター super() がデフォルトで呼び出されます。

    • 🎜親クラスにパラメーターのないコンストラクターがない場合、システムはデフォルトのパラメーターなしのコンストラクターを調整できないため、コンパイルの呼び出しは通過しません。🎜🎜🎜🎜🎜🎜追加の説明🎜:🎜🎜🎜🎜 Java では、パラメーター化されたコンストラクターを作成した後、システムはパラメーターを持たなくなります。デフォルトのパラメータなしのコンストラクタ🎜🎜🎜🎜親クラスにコンストラクタがない場合、システムはデフォルトでパラメータなしのコンストラクタを持ちます🎜🎜🎜

    以上がJava の継承、サブクラスが親クラスのコンストラクターを継承するかどうかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。