class Base{
  protected Check check = null;
  protected void OnInit(){}
}

class Child extends Base {
  protected void OnInit(){
    // 親クラスのOnInit()を呼ぶ前に、protectedのメンバ変数にインスタンスをセットしてあげないとヌルポ
    check = new Check( "ほげほげ" );
    super.OnInit();
  }
}

なんだよ、、、親クラスのメンバ変数のインスタンス化を子クラスで記述しなくちゃいけないってどう考えてもおかしいだろ…

せめて、OnInit()が純粋仮想関数になってるか、
「protected abstract Check Base::createCheck(); 」になってて、子クラス側でCheckクラスの新しいインスタンスを返すことを強制されてれば良いのに…

オブジェクト指向言語覚えたての人というか丸っきり初心者過ぎて、なんで彼が共通ライブラリ書いてんだよ……