728x90
오버로딩
1. 목적
같은 기능을 하는 메서드를 매개변수만 다르게 정의하여 코드의 가독성과 재사용성을 높여준다.
같은 이름의 메서드를 여러 개 정의하여 다양한 매개변수 형태로 사용할 수 있도록 유연성을 제공한다.
2. 특징
- 메서드 이름은 동일하지만, 매개변수가 다흐다.
- 매개변수의 개수, 타입, 순서가 다르면 오버로딩이 가능하다.
- 리턴 타입은 오버로딩에 영향을 주지 않는다.
- 같은 클래스 내에서 정의된다.
- 생성자(Constructor)도 오버로딩 가능하다.
3. 사용 예시
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 String add(String a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3)); // 5
System.out.println(calc.add(2, 3, 4)); // 9
System.out.println(calc.add(2.5, 3.2)); // 5.7
System.out.println(calc.add("결과: ", 10)); // 결과: 10
}
}
오버라이딩
1. 목적
부모 클래스로부터 상속받은 메서드를 자식 클래스에서 변경(재정의)하여 사용한다.
부모 클래스의 기본 동작을 유지하면서, 자식 클래스에서 더 적합한 동작을 구현할 수 있다.
2. 특징
- 메서드 이름, 매개변수, 리턴 타입이 부모 메서드와 완전히 동일해야 한다.
- 메서드의 구현(내용)만 변경이 가능하다.
- @Override 애너테이션을 사용하면 컴파일러가 올바르게 오버라이딩했는지 확인할 수 있다.
- 접근 제한자는 부모보다 좁게 설정할 수 없다.
- 부모 클래스의 메서드를 super 키워드를 이용하여 호출이 가능하다.
3. 사용 예시
// 부모 클래스
class Animal {
public void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// 자식 클래스
class Dog extends Animal {
@Override
public void makeSound() { // 부모 클래스의 메서드를 오버라이딩
System.out.println("멍멍!"); // 내용 변경
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("야옹~");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // 멍멍!
myCat.makeSound(); // 야옹~
}
}
728x90
'자바' 카테고리의 다른 글
[JAVA] 배열(Array) (0) | 2025.03.11 |
---|---|
[JAVA] record (0) | 2025.03.11 |
[JAVA] Getter, Setter (0) | 2025.03.06 |
[JAVA] 생성자 (0) | 2025.03.06 |
[JAVA] Object Class (0) | 2025.03.05 |