由于在 Java 中实现接口的类必须定义接口中的每个方法以避免被声明为抽象,所以我想知道以下几点:
当我创建一个实例化 Hashtable 对象的程序时,为什么我不需要在 Map 接口中定义每个方法?我没有明确定义的方法是否自动创建为“存根”?
您正在从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 提供。