2

通常、オブジェクトを作成するときは、次のように同じタイプを前に指定します。

Scanner scanner = new Scanner(System.in);

ただし、HashMap オブジェクトと TreeMap の宣言は、次のように異なる構文に従います。

Map m1 = new HashMap();
SortedMap sm = new TreeMap();

理由は何ですか?私は教授に尋ねた。しかし、彼は答えを知りませんでした。

4

4 に答える 4

5

ただし、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();

私は教授に尋ねた。しかし、彼は答えを知りませんでした。

それは私を怖がらせる...

于 2012-08-13T05:52:14.390 に答える
2

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...

あなたの教授が本当にこれに答えることができないなら、あなたは本当に新しい教授を得る必要があります!!

于 2012-08-13T05:49:16.147 に答える
1

宣言することもできます

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 です。

于 2012-08-13T06:06:25.723 に答える
1

SortedMapはインターフェイスであるため、インスタンス化できません。そのため、このインターフェイスを実装する子クラス オブジェクトを作成し、TreeMapそれをインターフェイス オブジェクトに割り当てて、SortedMap子と親の両方のクラスの関数を使用できるようにします。

于 2012-08-13T05:48:54.073 に答える