[JAVA] 오버라이딩(Overriding)과 오버로딩(Overloading)

예름·2025년 2월 26일
2

Java

목록 보기
2/9
post-thumbnail

오버로딩

같은 이름의 메서드를 여러 개 정의하는 것

특징

  • 메서드 이름이 같아야 함
  • 매개변수 목록(파라미터)이 달라야 함
    -> 개수, 타입, 순서 중 하나 이상이 다름
  • 반환 타입은 영향 없음
  • 컴파일 타임에 어떤 메서드가 실행될지 결정됨
class MathUtil {
    // 정수 두 개를 더하는 메서드
    int add(int a, int b) {
        return a + b;
    }

    // 정수 세 개를 더하는 메서드 (매개변수 개수 다름)
    int add(int a, int b, int c) {
        return a + b + c;
    }

    // 실수를 더하는 메서드 (매개변수 타입 다름)
    double add(double a, double b) {
        return a + b;
    }
}

오버라이딩

상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것

특징

  • 메서드 이름, 매개변수, 반환 타입이 완전히 동일해야 함
  • 부모 클래스의 메서드를 자식 클래스에서 변경하여 사용
  • 접근 제어자는 같거나 더 넓은 범위로 변경 가능
  • 컴파일 타임이 아닌 런타임(Runtime)에 실행될 메서드가 결정됨 (다형성 활용 가능)
  • @Override 어노테이션을 사용하면 컴파일 오류 방지 가능
class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.sound(); // 멍멍!
        myCat.sound(); // 야옹!
    }
}

오버로딩은 같은 클래스 내에서 발생하고, 오버라이딩은 상속 관계에서 발생한다.

profile
안정적인 쳇바퀴를 돌리는 삶

0개의 댓글