IT/JAVA
오버라이딩과 오버로딩의 차이
스콘_
2021. 4. 28. 14:22
반응형
오버라이딩(Overriding)
오버라이딩이란 상위클래스의 선언된 메서드를 하위 클래스에 기능에 따라서 메서드를 재정의하여 사용 하는 것이라고 할 수 있습니다.
자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메서드를 상속받습니다.
이렇게 상속받은 메서드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있습니다.
오버라이딩의 조건
- 오버라이딩이란 메서드의 동작만을 재정의 하는 것이므로, 메서드의 선언부의 기존 메서드와 완전히 같아야 합니다. 하지만 메서드의 반환 타입은 상위클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있습니다.
- 상위 클래스의 메서드보다 접근제어자를 더 좁은 범위로 변경 할 수 없습니다.
- 상위 클래스의 메서드보다 더 큰 범위의 예외를 선언할 수 없습니다.
오버라이딩 예시
abstract class Duck{
String kind="오리";
abstract void fly();
// body가 없는 메서드는 하나라도 있으면
// class에서는 반드시 클래스명 앞에 abstract를 붙여야 한다.
//
//실제메서드
void swim() {
System.out.println(kind+"가 수영을 한다!!");
}
}
class NormalDuck extends Duck{
// 상위에 있는 추상메서드는 하위에서 반드시 선언하여야 한다.
@Override
void fly() {
System.out.println("보통 오리는 날지 못한다");
}
}
// 상위 인터페이스, 하위 실제 클래스
interface Flyway{
void fly();
default void method2() {
System.out.println("default 실제 메서드");
}
}
// 인터페이스 implements로 상속 받는다
class Wing01 implements Flyway{
@Override
public void fly() {
System.out.println("날개1호로 하늘을 날다!");
}
}
오버로딩(Overloading)
메서드 오버로딩이란 같은 이름의 메서드를 중복하여 정의하는 것을 말합니다.
자바에서는 원래 한 클래스의 같은 이름의 메서드를 둘 이상 가질 수 없습니다.
하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메서드를 작성할 수 있습니다.
즉, 메서드 오버로딩은 서로 다른 시그니처를 갖는 여러 메서드를 같은 이름으로 정의하는 것이라고 할 수 있습니다,
이러한 메서드 오버로딩을 사용함으로써 메서드에 사용되는 이름을 절약할 수 있습니다.
또한, 메서드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.
메서드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나입니다.