오버로딩 & 오버라이딩
- 컴파일 다형성
- 이름이 같지만, 매개변수의 타입/개수/순서 를 다르게 정의하여 사용하는 방법
- 어떤 메서드가 호출될지 컴파일 시점에서 결정
- 코드를 직관적이게 만드는데 사용
- 런타임 다형성
- 부모클래스 또는 인터페이스에 정의된 메서드를 하위 클래스에서 재정의하여 사용하는 방법
- 어떤 메서드가 호출될지 런타임 시점에 결정된다.
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new TreeMap<>();
해당 형태로 map1 / 2를 구현했다면. 객체 타입은 각각 HashMap/TreeMap 이 되며, 변수 타입은 모두 Map이 된다. - 즉 map1.add / map2.add 등 Map인터페이스가 가진 함수만을 사용할 수 있으며, HashMap이나 TreeMap가 가진 고유메서드는 사용할 수 없다. 하지만, 오버라이딩(런타임 다형성)으로 재정의한 각각의 메서드로 해당 동작이 구현체의 특성에 맞게 실행되게 된다.