찾다

 >  Q&A  >  본문

Java LinkedHashMap为什么要实现Map接口?

HashMap已经实现了Map接口,LinkedHashMap既然继承了HashMap,为什么还要implements一遍,是为了保留自己跟父类HashMap中Map方法不一样的可能性吗?如果是,那为什么不直接重写,还要再继承呢?

附:LinkedHashMap源代码

public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {
/*
省略内部代码
*/
}
ringa_leeringa_lee2766일 전977

모든 응답(3)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-18 09:32:41

    JDK의 Collection 소스 코드에는 이러한 작성 방법이 많이 있습니다.
    사실 이런 글쓰기 방식은 부작용이 없다는 점을 인정해야 합니다.
    그런데 이렇게 작성하면 LinkedHashMap의 소스코드를 따로 열어보면 어떤 클래스를 상속하고 어떤 인터페이스를 구현하는지 알 수 있다는 장점이 있습니다. 즉, HashMapLinkedHashMap을 구현한다는 것을 알기 위해 Map의 소스 코드를 클릭할 필요가 없습니다. 즉, 특히 클래스 간의 상속 관계가 복잡한 경우 상속 관계에 대해 걱정할 필요가 없습니다.

    는 인도적인 고려에 기초합니다.
    인터페이스가 인터페이스를 상속하지만 하위 인터페이스는 명시적으로 선언됩니다. 상위 인터페이스 모든 메소드에 @Override 주석을 명시적으로 추가하여 이 메소드가 상위 인터페이스에서 상속되며 내가 정의한 인터페이스와 아무 관련이 없음을 구체적으로 나타냅니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:32:41

    사실 이는 단지 Java 개발자의 관행일 수도 있습니다.
    일반적으로 우리의 요구 사항은 특정 클래스가 어떤 인터페이스를 구현해야 하는지 명시하지만 실제로 이러한 인터페이스의 상호 종속성을 찾아 중복 프로젝트를 제거하는 데 어려움을 겪는다면 프로세스가 번거로워지고 이러한 중복은 또한 컴파일 타임에 자동으로 처리됩니다. 그래서 이 사람들은 구현해야 하는 클래스를 직접 작성해 수동으로 중복을 제거하는 수고를 덜었습니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 09:32:41

    소스코드를 보면 클래스의 정의만 보일 뿐, 이 이유에 대한 더 깊은 탐구는 없습니다. Java에서는 하나의 클래스만 상속할 수 있지만 여러 다른 인터페이스를 구현할 수 있다는 것을 알고 있습니다.

    으아악

    회신하다
    0
  • 취소회신하다