공통점
- method 정의 시 이름을 같게 정의한다.
- 사용이 편리하다.
- 다형성 효과
차이점
Overloading(매서드 재정의)
-
super class의 메서드를 sub class에서 재정의해서 사용하는 것
-
상속이 전제가 되어야 한다
-
상속받은 메서드와 전체적인 기능은 동일하지만 상세 구현이 다를 경우 기존의 상속 받은 메서드를 사용할 수 없으므로 새로운 메서드를 추가로 선언해야 한다.
-
규칙
- 메서드명, 인자, 리턴 타입을 동일하게 선언
- Access Modifier(접근 제한자)는 부모와 같거나 부모보다 넓은 범위로 정의
- 부모 메서드와 같은 예외를 던지거나 예외를 안던진다.
-
리턴 타입
- 1.7 버전 : 상속 받은 메서드와 리턴 타입이 반드시 같아야 한다.
- 1.8 버전 : 상속 받은 메서드와 리턴 타입이 같거나 sub를 리턴한다.
Overriding
- 한 클래스 내에 메서드명이 같은 메서드들을 여러개 정의 하는 것. (즉, 메서드의 인자를 다르게 전달받고 싶을 경우 메서드의 이름을 같게 하고 파라미터 타입을 다르게 해서 사용하는 것)
- 상속이 아니어도 사용이 가능하다. 단, 인자가 달라야 한다.
- 같은 기능을 하는 메서드를 다양한 타입의 인자로 사용하고 싶을 경우
- 자바의 대표적인 overloading 함수는 println. (이클립스에서 ctrl + space bar를 통해 확인)
+ 클래스 내의 메인 메서드도 오버로드 할 수 있다.
-
규칙
- 파라미터의 개수를 다르게 선언
- 파라미터의 타입을 다르게 선언
- 리턴 타입은 상관 X
private static void sum(int a, int b){
System.out.println("a+b = ", a+b);
}
private static void sum(int a, int b, int c){ //파라미터의 개수를 다르게 선언.
System.out.println("a+b+c = ", a+b+c);
}
private static void sum(double a, double b){ //파라미터의 타입을 다르게 선언.
System.out.println("a+b = ", a+b);
}