abstrac class explosion, newlevelmethod