由于在Java中实现接口的类必须定义接口中的每个方法以避免被声明为abstract,我想知道以下内容:
当我创建一个实例化Hashtable对象的程序时,为什么我不需要在Map接口中定义每个方法?我没有明确定义的方法是自动创建的“存根”吗?
答案 0 :(得分:6)
您正在从Hashtable
类创建一个已经实现了所有必要方法的对象。您不是在创建一个类,而是从该类创建一个对象。
如果您创建了一个实现Map
的类,编译器会要求您实现所有必要的方法。
答案 1 :(得分:2)
Hashtable是否实现了Map接口中的每个方法?
是。如果您查看JavaDoc,Hashtable类已被定义为
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
请注意,该类已将不声明为 abstract ,并且实现了Map 。因此,它必须并且它确实实现了Map
接口中定义的所有方法。
当我创建一个实例化Hashtable对象的程序时,为什么我不需要在Map接口中定义每个方法?
实例化对象时,其方法的实现由其类提供。因此,当您实例化Hashtable
对象时,它会使用Hastable
类已经提供的实现。
当您从中实例化对象时,创建类 而非 时,需要提供实现。在实例化时,类不能是抽象的,即实现应该已经存在;由JDK提供的Hashtable
由您或类似提供。