サブクラスのコンストラクタを呼出す

  • Aの手

public class HandOfA {
 public HandOfA () {
  System.out.println("A「グー!!");
 }
}

  • Bの手

public class HandOfB extends HandOfA{
 public HandOfB () {
  System.out.print("B「パー!」");
 }
}

  • main

public class HandsTester {
 public static void main(String[] args) {
  System.out.println("ジャーンケーン・・・");
  new HandOfB();
 }
}

  • 実行結果

ジャーンケーン・・・
A「グー!!
B「パー!」

おお。

  • new HandOfB()を実行するとHandOfBコンストラクタがスタックの一番上のフレームに格納される。
  • HandOfB()はスーパークラスのコンストラクタであるHandOfAを呼出すから、スタックではHandOfBの上にHandOfAコンストラクタが格納される(これがプッシュ)。
  • スタックからはポップされるから、HandOfAコンストラクタの方が先に実行される。

DAKARA!!
Aはこのままじゃ永遠にBに勝てない
※厳密にはHandOfAコンストラクタの上にObject()が置かれ、それが一番最初にポップされる。