오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 의미합니다. 오버로딩은 같은 이름의 메서드를 매개변수를 달리하여 여러개 정의하는 것을 의미합니다.
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 메서드는 매개변수의 개수와 타입에 따라 오버로딩됨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 객체는 부모 클래스의 메서드 대신, 자식 클래스에서 오버라이딩한 메서드가 호출됨