HashMap已经实现了Map接口,LinkedHashMap既然继承了HashMap,为什么还要implements一遍,是为了保留自己跟父类HashMap中Map方法不一样的可能性吗?如果是,那为什么不直接重写,还要再继承呢?
附:LinkedHashMap源代码
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {
/*
省略内部代码
*/
}
怪我咯2017-04-18 09:32:41
JDK의 Collection 소스 코드에는 이러한 작성 방법이 많이 있습니다.
사실 이런 글쓰기 방식은 부작용이 없다는 점을 인정해야 합니다.
그런데 이렇게 작성하면 LinkedHashMap
의 소스코드를 따로 열어보면 어떤 클래스를 상속하고 어떤 인터페이스를 구현하는지 알 수 있다는 장점이 있습니다. 즉, HashMap
가 LinkedHashMap
을 구현한다는 것을 알기 위해 Map
의 소스 코드를 클릭할 필요가 없습니다. 즉, 특히 클래스 간의 상속 관계가 복잡한 경우 상속 관계에 대해 걱정할 필요가 없습니다.
이 는 인도적인 고려에 기초합니다.
인터페이스가 인터페이스를 상속하지만 하위 인터페이스는 명시적으로 선언됩니다. 상위 인터페이스 모든 메소드에 @Override 주석을 명시적으로 추가하여 이 메소드가 상위 인터페이스에서 상속되며 내가 정의한 인터페이스와 아무 관련이 없음을 구체적으로 나타냅니다.
ringa_lee2017-04-18 09:32:41
사실 이는 단지 Java 개발자의 관행일 수도 있습니다.
일반적으로 우리의 요구 사항은 특정 클래스가 어떤 인터페이스를 구현해야 하는지 명시하지만 실제로 이러한 인터페이스의 상호 종속성을 찾아 중복 프로젝트를 제거하는 데 어려움을 겪는다면 프로세스가 번거로워지고 이러한 중복은 또한 컴파일 타임에 자동으로 처리됩니다. 그래서 이 사람들은 구현해야 하는 클래스를 직접 작성해 수동으로 중복을 제거하는 수고를 덜었습니다.
PHP中文网2017-04-18 09:32:41
소스코드를 보면 클래스의 정의만 보일 뿐, 이 이유에 대한 더 깊은 탐구는 없습니다. Java에서는 하나의 클래스만 상속할 수 있지만 여러 다른 인터페이스를 구현할 수 있다는 것을 알고 있습니다.
으아악