작성
·
936
2
[질문 내용]
여기에 질문 내용을 남겨주세요.
항상 궁금했던건데, 인터페이스의 구현체에서, 구현체 자체 메서드가 있는 구현체들도 있는데, 변경 용이성때문에 항상 상위 타입으로 선언하는건가요?
예를들어, 인터페이스 Map에는 clone메서드가 없고, HashMap에는 clone 메서드가 있는데, Map으로 선언하면, HashMap 자체 메서드들은 사용못하게되는데 구현체 자체 메서드를 사용할 상황도 있을거같은데, 항상 구현 객체 생성할때 상위로 선언하는 이유가 궁금합니다. 구현체 기능을 더 사용한다 vs 변경에 용이하게한다. 둘다 비슷한 느낌이여서 뭐에 우위를 두고 선정해야할지 잘모르겠습니다.
답변 1
1
다형성을 활용하는 것인데요. 인터페이스로 조작하면 하위 클래스의 소스코드를 몰라도 상위 클래스 사용법만 알면 활용할 수 있습니다. 하위 클래스를 언제든 갈아 끼울 수 있고요. 말씀해주신 대로 구현체의 자체 기능은 바로 사용할 수는 없지만, Downcasting
을 사용해서 하위 클래스의 자체 기능을 사용할 수 있습니다.
((HashMap)map).clone();
뭐 이런 식으로 사용하면 된다는 겁니다.