D

 Aはアクセス修飾子がより狭い範囲になっている。
 Bは引数構成が違う。Cは戻り値型が違う。

B

 Bar型をFoo型にアップキャストして使っているので、
 Bar型でオーバーライドしたprintメソッドが起動する