오버라이딩, 오버로딩

sun·2024년 2월 28일
0

java

목록 보기
31/38

오버라이딩과 오버로딩은 자주 나오면서도 중요한 개념이다.

- 오버라이딩 :

상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의해서 사용하는 것을 의미한다.

오버라이딩 예시 ))

// 상위 클래스
class Animal {
    // 소리를 출력하는 메서드
    public void makeSound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

// 하위 클래스
class Dog extends Animal {
    // 오버라이딩: 상위 클래스의 makeSound() 메서드를 재정의
    @Override
    public void makeSound() {
        System.out.println("개가 멍멍 소리를 냅니다.");
    }
}

// 하위 클래스
class Cat extends Animal {
    // 오버라이딩: 상위 클래스의 makeSound() 메서드를 재정의
    @Override
    public void makeSound() {
        System.out.println("고양이가 야옹 소리를 냅니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog(); // 다형성 적용
        Animal animal2 = new Cat(); // 다형성 적용

        animal1.makeSound(); // Dog 클래스의 makeSound() 메서드가 호출됨
        animal2.makeSound(); // Cat 클래스의 makeSound() 메서드가 호출됨
    }
}

위 예제는 'Animal'클래스 상속받는 'Dog'클래스와 'Cat'클래스를 정의하고, 각각 'makeSound()' 메서드를 오버라이딩 했습니다.
'Main'클래스에서는 'Animal'타입의 객체를 생성하고, 이들을 다형성을 이용하여 'Dog'와'Cat'의 인스턴스로 참조합니다.
이후 각 객체의 'makeSound()'메서드를 호출하면, 해당하는 하위 클래스의 오버라이딩된 메서드가 실행됩니다.

- 오버로딩 :

같은 이름의 메소드를 여러 개 가지면서 매개변수의 타입과 개수를 다르게 하여 정의하는 것을 의미한다.
즉, 메소드의 시그니처를 다르게 하여 정의하는 것이다.

오버로딩 예시 ))

class Calculator {
    // 정수형 두 개를 더하는 메서드
    public int add(int num1, int num2) {
        return num1 + num2;
    }
    
    // 실수형 두 개를 더하는 메서드
    public double add(double num1, double num2) {
        return num1 + num2;
    }
    
    // 정수형 세 개를 더하는 메서드
    public int add(int num1, int num2, int num3) {
        return num1 + num2 + num3;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        
        // 각각 다른 오버로딩된 메서드 호출
        System.out.println(calc.add(5, 10)); // 정수형 두 개를 더하는 메서드 호출
        System.out.println(calc.add(3.5, 2.5)); // 실수형 두 개를 더하는 메서드 호출
        System.out.println(calc.add(1, 2, 3)); // 정수형 세 개를 더하는 메서드 호출
    }
}

0개의 댓글