Pra*_*nde 15 java inheritance hashmap
在java中实现HashMap<K,V>我们需要实现Map<K,V>.
但是,当我在java类中调试更多时,似乎.... java将HashMap类定义如下.
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
同时我看到public abstract class AbstractMap<K,V>工具Map<K,V>它也实现了接口Map<K,V>.
如果抽象类实现了接口,那么Map<K,V>在HashMap类级别实现背后的原因是什么?
根据我的理解HashMap类AbstractMap,可以根据需要覆盖从中继承的所有方法HashMap.
它可能只是让事情变得更加明显.您基本上可以直接从HashMap实现该Map接口的单个类的代码中看到.是的,它已经扩展AbstractMap,但这可能只被视为实现细节.
再次实现接口没有错.这不会改变代码的编译方式,但它肯定会有所帮助,因为你会立即看到它.您不必首先爬上类层次结构或加载API文档.
我相信这背后的原因是Java中的抽象类不需要声明/实现接口中的所有方法。因此
public interface MyInterface{
void a();
void b();
void c();
}
Run Code Online (Sandbox Code Playgroud)
该接口的以下抽象实现是有效的。
public abstract class AbstractClass implements MyInterface {
public void a() {}
public void c() {}
public void d() {}
}
Run Code Online (Sandbox Code Playgroud)
因此,我相信,为了明确HashMap实现抽象类未实现的方法,它被显示为实现接口,Map而这样做是完全可选的,因为抽象类的任何实现都需要实现抽象类中的所有方法类或派生基类。因此,在上面的示例中,抽象类的有效实现是
public class MyClass extends Abstract{
public void a() {}
public void c() {}
public void b() {} //if you dont implement this, compile error
public void d() {}
}
Run Code Online (Sandbox Code Playgroud)
您也可以重写如下:
public class MyClass extends Abstract implements MyInterface {
public void a() {}
public void c() {}
public void b() {}
public void d() {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7246 次 |
| 最近记录: |