通常、オブジェクトを作成するときは、次のように同じタイプを前に指定します。
Scanner scanner = new Scanner(System.in);
ただし、HashMap オブジェクトと TreeMap の宣言は、次のように異なる構文に従います。
Map m1 = new HashMap();
SortedMap sm = new TreeMap();
理由は何ですか?私は教授に尋ねた。しかし、彼は答えを知りませんでした。
ただし、HashMap オブジェクトと TreeMap の宣言は、次のように異なる構文に従います。
その必要はありません。次のように記述できます。
HashMap<String, Integer> map = new HashMap<String, Integer>();
...それはあなたが通常しないということです。
同様に、次のように書くこともできます:
Object scanner = new Scanner(System.in);
基本的に、次の 2 つのタイプがあります。
それらは同じである必要はありませんが、構築された型は変数型と互換性のある代入である必要があります。クラスでサポートされているスーパークラスまたはインターフェイスである必要があります。Map
(またはその他の) 変数のみをインターフェイスの型として指定するポイントList
は、ほとんどのコードがそれをマップ/リスト/セット/その他としてのみ考える必要があるということです。HashMap
カバーの下にある(またはなど) であるという事実ArrayList
は、実装の詳細です。
詳細については、「インターフェイスへのプログラミング」を参照してください...ただし、どちらの場合も構文は同じであることに注意してください。
VariableType variableName = new ActualTypeBeingConstructed();
私は教授に尋ねた。しかし、彼は答えを知りませんでした。
それは私を怖がらせる...
Map はインターフェイス (またはより一般的なクラス) です - TreeMap は Map を実装するものです (またはより具体的なクラスです)。
たとえば、List は一般的なインターフェイスであり、ArrayList は List を実装しているため、次のように言えます。
List<Obj> list = new ArrayList<Obj>();
// or
ArrayList<Obj> list = new ArrayList<Obj>();
// but not
ArrayList<Obj> list = new List...
あなたの教授が本当にこれに答えることができないなら、あなたは本当に新しい教授を得る必要があります!!
宣言することもできます
HashMap m1 = new HashMap();
TreeMap sm = new TreeMap();
Map は、HashMap (および TreeMap) によって実装されるインターフェースです。Map インターフェイスを実装する任意のオブジェクトを、マップとして宣言された変数に割り当てることができます。インターフェース TreeMap についても同様です。
Java では、クラスとインターフェイスの階層があります。クラスは、それが実装する任意のインターフェースの任意の「親」クラスに割り当てることができます
より複雑な例は、Swingclass JTextField です。ここでの階層は次のとおりです。
Component
Containter
JContainer
JTextComponent
JTextField
そう
Component c1 = new JTextField();
Containter c2 = new JTextField();
JContainer c3 = new JTextField();
JTextComponent c4 = new JTextField();
はすべて完全に有効です。JTextField は、JTextCompent、JContainer、Container、および Component です。
SortedMap
はインターフェイスであるため、インスタンス化できません。そのため、このインターフェイスを実装する子クラス オブジェクトを作成し、TreeMap
それをインターフェイス オブジェクトに割り当てて、SortedMap
子と親の両方のクラスの関数を使用できるようにします。