2017-06-23 3 views
0

私はJavaを使い慣れていないので、ちょうど楽しみのためにコーディングしています。私はこれについて疑問に思っています。宣言の相違点Java

Set<Employee> employees1 = new HashSet<Employee>(); 
HashSet<Employee> employees2 = new HashSet<Employee>(); 

2つの宣言に違いはありますか? 「舞台裏」のような意味ですか?私はここで同様の問題を探していましたが、私は検索フィールドの質問をどのように解釈するかわからないので、何も見つからなかったでしょう。

+3

'Set'はインターフェイスです。 'HashSet'はそのインタフェースの実装です。 'Set'と言うと、(実行時に)他の実装(Setの)のためにHashSetをスワップアウトすることができます。 – byxor

+0

インタラクション/多型を参照してください。それはあなたのためにいくつかのものをクリアする必要があります。 – DCON

+0

そして、最初の宣言を使用する主な利点は、抽象化であり、将来、Set実装(たとえば、SortedSetへ)を切り替えることができます。 – mulya

答えて

2

Setはインターフェイスです。ここで、HashSetはそのインターフェイスを実装するクラスです。参照変数によって

Set<Employee> employees1 = new HashSet<Employee>(); 

あなたはSetインタフェースで宣言され、HashSetでオーバーライドされHashSetクラスのメソッドのみを呼び出すことができemployees1employees2を使用することにより

HashSet<Employee> employees2 = new HashSet<Employee>(); 

あなたはSetインターフェイスとHashSetクラス自身のメソッドのオーバーライドされたメソッドを呼び出すことができるようになります(Setインタフェースで宣言されていません。)HashSetのいずれかである一方、

+2

そして、最初の宣言を使用する主な利点は、抽象化であり、将来、Set実装(たとえば、SortedSetに)を切り替えることができます。 – mulya

+0

@mulya nice point – gprathour

+2

インターフェイスを使用することを選択することは、将来の自己に驚きの贈り物を送るようなものです。 – byxor

0

Setは、インターフェイスでありますその実装。

変数がSetと宣言されている場合は、値として他の実装を持つことができます。 EG: