Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Listインターフェイスの変数にArrayListインスタンス化

はじめまして。質問させていただきます。

List list = new ArrayList();

のようにListインターフェイスの変数にArrayListをインスタンス化することの利点がわかりません。
最近、ArrayListの変数で受けずに上記のようにすることを推奨される場合が多いのですが、ArrayListの変数で宣言したほうが同クラスのメソッドも普通に呼べますし、Listを引数に受けるメソッドへもそのまま渡せますし、使い勝手が良い気がするのですがどうなのでしょう?

6

回答

81187

閲覧

6件の回答

評価

0

「仕様と実装の分離 オブジェクト指向」でぐぐってみては如何でしょうか。

評価

0

>ArrayListの変数で宣言したほうが

ArrayList一択と最初から決まってるなら、
確かにその通り。

評価

0

最大の利点は
変数listの使用者が
Listクラスで宣言しているメソッドのみの
使用が許されているってところね。
ArrayListで追加されているメソッドが利用できない
てことよ。

でも、これがローカルなブロック内
しかもprivateだったりしたら
あまり意味ないわね。
将来 = new ArrayListを
別のものに置き換えたい
とかそういう意図があるなら
ありかもしれないわ。

評価

0

しかし、ArrayListでしか使えないメソッドを使うことはあまりないので、Listでもとくに困ることはないのが実際だな。
継承の関係でいくと、ServletRequestとHttpServletRequestの話なら、だいぶ違うんだが。

評価

0

皆さん。コメントありがとうございます。
やはり利点なしですね。

評価

0

>最大の利点は
>変数listの使用者が
>Listクラスで宣言しているメソッドのみの
>使用が許されているってところね。
>ArrayListで追加されているメソッドが利用できない
>てことよ。


戻される型が interface の場合、

実装する“はず”のクラスの Mockを作成することにより平行的に開発が可能になる。

だとおもうが

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。