오버로딩과 오버라이딩
오버로딩
(Overloading)
클래스 내에 같은 이름의 메서드를 여러 개 선언하는 것
메서드 오버로딩의 조건
매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다
class A {
리턴 타입 메서드명 (타입 변수, ...) {
...
}
리턴 타입 메서드명 (타입 변수, ...) {
...
}
}
리턴타입 : 같아도 상관없음
메서드 이름 : 동일해야함
매개변수 : 매개변수의 타입, 개수, 순서가 달라야함
매개값을 다양하게 받아서 처리할 수 있도록 하기 위해서는 오버로딩이 필요하다.
int plus(int x, int y) {
int result = x + y;
return result;
}
double plus(double x, doutble y) {
double result = x + y;
return result;
}
오버로딩된 매서드를 호출할 경우 JVM은 매개값의 타입을 보고 메서드를 선택한다.
plus(1, 2);
위와 같은 메서드를 호출하면 윗줄의 메서드가 호출이 되고,
plus(1.1, 2.2);
바로 위와 같은 메서드를 호출하면 두 번째 double 타입으로 오버로딩된 메서드를 JVM이 알아서 판단하여 선택한다.
JVM은 일차적으로 매개 변수의 타입을 보지만, 매개 변수의 타입이 일치하지 않을 경우
자동 타입 변환이 가능한지를 검사한다.
메서드를 오버로딩할 때
매개변수의 타입, 개수, 순서가 똑같을 경우 매개 변수 이름이
다르다고해서오버로딩이라고 하지 않는다.
리턴 타입만 다르고 매개 변수가 동일하다면 이것도 오버로딩이 아니다.
int plus(int x, int y);
double plus(int a, int b);
위와 같은 경우는 오버라이딩이 아니며, 컴파일 오류도 날것이다.
오버라이딩
(Overriding)
상속관계에 있는 클래들간에 메서드를 재정의 하는 것
오버라이딩을 통해 자식클래스는 부모 클래스의 메서드를 자신의 필요에 맞게
재정의하여 사용할 수 있다.
이렇게 하면 부모 클래스의 메서드가 자식 클래스에 의해 가려지고,
자식 클래스에서 재정의한 메서드가 호출된다.
class Animal {
public void sound() {
System.out.println("동물이 소리를 내고 있습니다.");
}
}
class Bird extends Animal {
// 부모 클래스의 sound 메서드를 오버라이딩
@Override
public void sound() {
System.out.println("짹짹짹");
}
}
Animal 클래스는 "sound"라는 메서드를 가지고 있고
Bird 클래스는 Animal클래스를 상속받아 "sound"를 오버라이딩 하였다.
Bird 클래스의 인스턴스에서 "sound"를 호출하면
"짹짹짹"이라는 메세지가 출력된다.
'자바 탐구' 카테고리의 다른 글
JPA) N + 1 문제 (0) | 2023.08.01 |
---|---|
자바) 예외 클래스 (0) | 2023.08.01 |
스프링) @SpringBootTest와 @WebMvcTest의 차이 (0) | 2023.07.25 |
스프링) RestClient (0) | 2023.07.25 |
자바) List, Set, Map, HashMap의 특성 (0) | 2023.07.24 |