抽象クラス(というか継承)の使い方がよくわかりません。

クラスA,B,Cを含むパッケージがあります。
Aは抽象クラスです。
Aを継承したクラスB,C,Dを作成します。
B,C,Dは異なる実装ですが、同じ機能を提供します。

この場合、B,C,Dのインスタンスは外部からは何型として参照すれば良いのでしょうか。