[Java] Overloading 와 Overriding 을 설명해주세요

orca·2024년 9월 22일

CS

목록 보기
19/46

오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미합니다. 오버로딩은 같은 이름의 메서드를 매개변수를 달리하여 여러개 정의하는 것을 의미합니다.

다형성

  • 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것
  • 대표적으로 오버로딩과 오버라이딩이 있음

Overloading

  • 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것
  • 매개 변수 리스트가 서로 달라야 함

example

class Calculator {
    // 두 개의 정수를 더하는 메서드
    public int add(int a, int b) {
        return a + b;
    }

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

    // 두 개의 실수를 더하는 메서드
    public double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(3, 4));         // 출력: 7 (정수 덧셈)
        System.out.println(calc.add(3, 4, 5));      // 출력: 12 (세 개의 정수 덧셈)
        System.out.println(calc.add(3.5, 4.5));     // 출력: 8.0 (실수 덧셈)
    }
}
  • add 메서드는 매개변수의 개수와 타입에 따라 오버로딩됨

Overriding

  • 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것
  • 상속받은 메서드를 자식 클래스에서 새롭게 동작하게 하고자 할 때 사용
  • 메서드 이름, 매개변수 목록, 반환 타입이 모두 부모 클래스의 메서드와 동일해야 함

example

class Animal {
    // 부모 클래스의 메서드
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    // 부모 클래스의 sound 메서드를 오버라이딩
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog();
        
        myAnimal.sound();  // 출력: Animal makes a sound
        myDog.sound();     // 출력: Dog barks (오버라이딩된 메서드가 호출됨)
    }
}
  • Dog 클래스는 Animal 클래스의 sound 메서드를 오버라이딩
  • myDog 객체는 부모 클래스의 메서드 대신, 자식 클래스에서 오버라이딩한 메서드가 호출됨

0개의 댓글