728x90
오버로딩에 대해서는 앞에서 다룬 적이 있다.
비슷한 단어지만 뜻은 완전히 다른 오버라이딩과 같이 비교를 해보도록 하자.
오버로딩
클래스내에 같은 이름의 메소드를 여러 개 선언하는 것을 오버로딩이라고 한다.
오버로딩의 조건
1. 메소드 이름은 같아야 한다.
2. 매개 변수의 개수나 타입이 달라야 한다.
리턴 타입은 아무런 상관이 없다는 것에 유의하자.
public class OverloadingEx {
void print() {
System.out.println("매개변수가 없는 오버로딩 예제1");
}
void print(int a) {
System.out.println("매개변수가 int형인 오버로딩 예제2");
}
void print(int a, String s) {
System.out.println("매개변수가 int형과 String형인 오버로딩 예제3");
}
// 리턴 타입과는 상관없음
int print(int x, int y) {
return x+y;
}
}
오버라이딩
상위 클래스의 메소드를 하위 클래스에서 재정의해서 사용하는 것을 말한다.
오버라이딩의 조건
1. 메소드 이름은 같아야 한다.
2. 매개 변수의 개수나 타입이 같아야 한다.
3. 리턴 타입이 같아야 한다.
추가적으로 접근 제한을 더 강하게 재정의할 수 없다는 점(부모 메소드가 public인데 재정의하는 자식 메소드가
default로 될 수 없다는 의미)과 새로운 예외를 throws를 할 수 없다는 것에 유의하자.
public class SuperClass {
int price = 5000;
public void buy() {
System.out.println("떡볶이 가격 : " + price + "원");
}
}
import java.util.Scanner;
public class SubClass extends SuperClass {
Scanner sc = new Scanner(System.in);
// 재정의한 메소드
@Override
public void buy() {
System.out.print("구매할 떡볶이의 수량을 입력하세요. : ");
int count = sc.nextInt();
System.out.println("떡볶이 " + count +"개의 가격 : " + price * count + "원");
}
}
public class OverridingEx {
public static void main(String[] args) {
SubClass subclass = new SubClass();
subclass.buy();
}
}
마지막으로 메소드가 재정의되었다면 자식 객체에서 메소드를 호출할 때
부모 객체의 메소드가 아니라 재정의된 자식 메소드가 호출된다는 것을 알고가자.
오버로딩과 오버라이딩 한 눈에 보기
오버로딩 | 오버라이딩 | |
메소드 이름 | 같아야 함 | 같아야 함 |
매개변수 개수, 타입 | 달라야 함 | 같아야 함 |
리턴 타입 | 상관 없음 | 같아야 함 |
728x90
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] 게터(getter)와 세터(setter) (0) | 2023.05.14 |
---|---|
[JAVA] 접근 제한자 (0) | 2023.05.13 |
[JAVA] 인스턴스 멤버, 정적 멤버 - static (0) | 2023.05.13 |
[JAVA] 날짜 클래스(SimpleDateFormat와 Calendar) (0) | 2023.05.07 |
[JAVA] 오버로딩과 this() (0) | 2023.05.06 |