Java でインターフェースを実装するクラスは、抽象として宣言されないようにインターフェース内のすべてのメソッドを定義する必要があるため、次のことについて疑問に思っていました。
Hashtable オブジェクトをインスタンス化するプログラムを作成する場合、Map インターフェイスですべてのメソッドを定義する必要がないのはなぜですか? 明示的に定義していないメソッドは、自動的に「スタブ」として作成されますか?
Hashtable は Map インターフェイスのすべてのメソッドを実装していますか?
はい。JavaDoc を見ると、Hashtableクラスは次のように定義されています。
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
クラスが抽象宣言されておらず、 Mapを実装していることに注意してください。したがって、インターフェイスで定義されたすべてのメソッドを実装する必要があります。Map
Hashtable オブジェクトをインスタンス化するプログラムを作成するときに、Map インターフェイスですべてのメソッドを定義する必要がないのはなぜですか?
オブジェクトをインスタンス化すると、そのメソッドの実装がそのクラスによって提供されます。したがって、オブジェクトをインスタンス化すると、クラスHashtable
によって既に提供されている実装が使用されます。Hastable
実装を提供する必要があるのは、クラスからオブジェクトをインスタンス化するときではなく、クラスを作成するときです。インスタンス化の際、クラスは抽象であってはなりません。つまり、実装がすでに存在している必要があります。あなたが提供するかHashtable
、JDKの場合は同様です。