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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- VPN 何これ 1 2022/04/19 01:32
- C言語・C++・C# C#のSystem.Windows.Media.Colorに関する質問です。 3 2022/05/18 11:51
- Java java final 1 2022/06/10 22:49
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- 中学校 Do you want a new bag? Want you a new bag? この二つの違い 3 2022/07/30 15:55
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オーバーライドとラッパーの違い
-
JTextFieldの入力制限
-
Javaのインスタンス化の構文の...
-
javaでクッキー認証を必要とす...
-
オブジェクト指向の特徴
-
JAVAでCPUなどのシリアル番...
-
抽象クラスをJUNITでテストする...
-
interface,extend,implementの...
-
interfaceとabstract
-
TableViewでタップした時にキー...
-
(vba)他のアプリケーションの右...
-
「タイプ初期化子が例外をスロ...
-
レコード件数の表示
-
変数名の付け方
-
サーブレットコンテキストの意...
-
パワーポイントのVBAでテキスト...
-
newしないインスタンス?実体化...
-
配列の重複する値とその個数を...
-
JAVAからHTMLへ値を返す方法
-
エクセルVBAで、条件に一致する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
「ラッパークラス」の存在意義...
-
ASP.NETでの共通コードの書き方...
-
JTextFieldの入力制限
-
「継承されたメソッドの可視性...
-
VB DLLプロジェクトについて
-
C# 「データが失なわれる可能性...
-
c++でのヘッダーファイルの循環...
-
【C#】クラスのコンストラクタ...
-
「IOException は対応する try ...
-
メソッドの引数にクラス名を渡す
-
ファイルパスが取得出来ない(P...
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
vb.net 自作プロパティの削除に...
-
なぜインタフェースを使うのか?
-
VBがオブジェクト指向言語でな...
おすすめ情報