
Javaコレクションフレームワークの、クラス型とインタフェース型の使い分けについてですが、
newで作ったインスタンスを、
クラス型に代入する場合と、インタフェース型に代入する場合があるのですが、どちらを優先して使ったほうがいいですか?
※物によっては、インタフェース型しかつかえないとか、どちらでも良い場合とかいろいろあると思います。
また、インタフェース型のほうがメソッドの種類が若干多いですが、抽象メソッドなのでオーバーライドして使うからそれは関係ないのかな。
・本に出てきた例
ArrayList<E> list = new ArrayList<E>();
List<E> list = new ArrayList<E>();
Queue<E> queue = new LinkedList<E>();
LinkedList<E> list = new LinkedList<E>();
LinkedList<E> stack = new LinkedList<E>();
Set<E> set = new HashSet<E>();
Map<E, M> map = new HashMap<E, M>();
No.1ベストアンサー
- 回答日時:
基本的にはインターフェースを使うのがよく、特別な必要があるときのみクラス型の変数を使います。
これは、第一にはインターフェース型の変数を使用していれば、実装にしばられず、必要があれば使用するインスタンスのクラス(実装クラス)を挿げ替えることができるからです。
なお、インターフェースしか使えない、ということはありませんし、実装クラスをインターフェースに代入したからといって使えるメソッドの種類が増えることもありません。
例えば、Queue<E> queue = new LinkedList<E>();のようにQueueインターフェースを使えば、LinkedListに備わっているメソッドの一部は使えなくなりますが、これは「良いこと」とされます。Queueインターフェースを使うことで、このオブジェクトがキューとして使われることが自然に保障され、余計なバグを埋め込む余地が減ったりといったメリットがあるからです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
抽象クラスからオーバーライド...
-
インターフェース型の使い方が...
-
なぜインタフェースを使うのか?
-
vb.net 自作プロパティの削除に...
-
C#でフォームのオブジェクト名...
-
インスタンス参照でアクセスで...
-
パワーポイントのVBAでテキスト...
-
「タイプ初期化子が例外をスロ...
-
僕の出身中学校は200人同級生が...
-
【JAVA】与えられた金額を貨幣...
-
変数名の付け方
-
Accessの連結・非連結オブジェ...
-
ResultSet での問題
-
エクセルVBAで、条件に一致する...
-
BLOB型の画像データを表示したい
-
生成したインスタンスを削除す...
-
StringBufferからStringへキャ...
-
VB.NETでのnothing の意義について
-
VB.NETでフォーム上にExcelのよ...
-
スーパークラスからサブクラス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(vba)他のアプリケーションの右...
-
interface,extend,implementの...
-
VB DLLプロジェクトについて
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
【C#】クラスのコンストラクタ...
-
C#でインターフェースのプロパ...
-
「ラッパークラス」の存在意義...
-
メソッドの引数にクラス名を渡す
-
VBがオブジェクト指向言語でな...
-
オーバーライドとラッパーの違い
-
デバッグ時に「Source not found」
-
スクロールバーについて
-
携帯IApplicationのsuper
-
ファイルパスが取得出来ない(P...
-
EventListenerの実装について
-
c# この高速化の方法あり? 2
-
抽象クラスが継承されているか...
-
ASP.NETでの共通コードの書き方...
-
抽象クラスをJUNITでテストする...
おすすめ情報