객체 지향에서 다형성이라고 하면 오버라이딩 (overriding)과 오버로딩 (overloading)이라고 할 수 있다. 물론 상위 클래스와 하위 클래스 사이에서도 다형성을 이야기할 수 있고, 인터페이스와 그것의 구현 클래스 사이에서도 다형성을 이야기할 수 있지만 가장 기본은 오버라이딩과 오버로딩이라고 할 수 있다.
<aside> 💡 오버라이딩: 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의 오버로딩: 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의
</aside>
오버로딩된 showName(String name), 오버라이딩된 showName()을 확인할 수 있다.
오버라이딩을 통한 메서드 재정의, 오버로딩을 통한 메서드 중복 정의를 통해 다형성을 제공하고 이 다형성이 개발자가 프로그램을 작성할 때 사용편의성을 준다.
오버라이딩의 경우, 하위 클래스가 재정의한 메서드를 알아서 호출해 줌으로써 형변환이나 instanceof 연산자를 써서 하위 클래스가 무엇인지 신경 쓰지 않아도 된다. 상위 클래스 타입의 객체 참조 변수에서 하위 클래스가 오버라이딩한 메서드를 자동으로 호출해준다.
오버로딩은 함수명 하나를 가지고 인자 목록만 달리하면 되니 얼마나 사용하기 편리한지 알 수 있다.
예를 들자면, add라는 함수가 있을 경우. 같은 함수로 인자 타입을 다르게 준다면, 얼마나 편리하게 쓸 수 있을지 감이 올 것이다.