コンストラクタとはクラスが生成されるときに必ず呼び出される操作のことを言う。では、クラスがクラスの性質を引き継ぐ「継承」ではどのような動きになるのか。下に例を示す。
class A {
A() {
System.out.print("A0 ");
}
A(int a) {
System.out.print("A" + a +" ");
}
}
class B extends A {
B() {
System.out.print("B0 ");
}
B(int b) {
super(b);
System.out.print("B" + b +" ");
}
}
このとき次のプログラムを実行すると何が表示されますか。
B b1 = new B();
B b2 = new B(1);
実行結果 A0 A1 B0 B1
参考→http://jp.fujitsu.com/solutions/sdas/technology/java-cobol/06-class.html
この結果からわかるように、継承を行った場合、コンストラクタの先頭でsuper(親クラス)のコンストラクタが実行されていることがわかる。super(b)のように引数の指定がある場合はわかりやすいが、何も明記されていない時でもsuper()が自動で呼び出されているため、そのことを認識しておかないと思わぬ結果を招くことになるので注意が必要。