오버로딩과 오버라이딩의 차이는 무엇인가요?
오버로딩은 같은 메서드 이름을 사용하는데 매개변수의 개수나 타입이 다른 것이고,
오버라이딩은 부모의 메서드를 상속받아 재정의해서 사용하는 것입니다.
오버로딩
이름이 같아도 매개변수 개수, 타입, 순서를 다르게 해서 같은 이름으로도 여러 개의 함수를 정의할 수 있는 것을 말합니다.
이는 프로그램의 유연성을 높이고 결과적으로 코드를 깔끔하게 하는 효과가 있으며 같은 클래스 내에서 사용합니다.
오버라이딩
상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의 하는 것을 말합니다.
상속 관계 클래스에서 사용되며 static, final 로 선언한 메서드는 오버라이딩이 불가능합니다.
예제 코드
- 상위 클래스 → 하위 클래스 오버라이딩
public class Animal {
public void cry() {
System.out.println("울다");
}
}
class Cat extends Animal {
@Override
public void cry() { // 재정의
System.out.println("야옹");
}
}
class Dog extends Animal {
@Override
public void cry() { // 재정의
System.out.println("왈");
}
}
- 인터페이스 → 하위 클래스 오버라이딩
public interface Animal { // 인터페이스
public void cry();
}
class Cat implements Animal {
@Override
public void cry() { // 재정의
System.out.println("야옹");
}
}
class Dog implements Animal {
@Override
public void cry() { // 재정의
System.out.println("왈");
}
}
간단히 Animal은 인터페이스로 만들고 구현체인 Cat, Dog를 클래스로 만들어서 오버라이드 하기