티스토리 뷰

포스팅에 앞서 내용이 틀릴 수 있습니다.
해당 부분 지적 감사히 받습니다.

자바를 공부하다보면 누구나 반드시 이부분에서 멈칫하게 된다

 

이름이 비슷한 두가지 단어에서 차이점을 알기 위해 한번쯤은 찾게되는 부분이다

 

각 단어의 사전적 정의부터 알아보자

 

오버로딩 : 한개의 Class 내에서 같은 이름을 가진 메소드가 2개 이상 존재

 

오버라이딩 : 부모 Class를 상속받은 자식 Class에서 부모 Class의 메소드를 재정의 하는 것.

 

이렇게만 보면 차이가 무엇인지 알기 힘들다.

 

조금 더 상세히 알아보자.

 

오버로딩 : 함수를 구현할 때 매개변수의 타입, 갯수가 달라야한다. 다만 리턴값/접근제어자만 다른 오버로딩은 구현할 수 없다.

 

오버라이딩 : 부모Class의 메소드와 이름, 매개변수, 리턴형이 반드시 동일해야 한다.

 

표를통해 간략히 보자.

 

 구분 오버로딩 (Overloading) 오버라이딩(Overriding)
 접근 제어자  모든 접근 제어자를 사용할 수 있다.  부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정할 수 있다.
 리턴형  달라도 된다  동일해야 한다
 메소드명  동일해야 한다  동일해야 한다
 매개변수  달라야만 한다(수/ 타입)  동일해야 한다
 적용 범위  같은 클래스 내에서 적용된다.  상속관계에서 적용된다.

 

이처럼 오버로딩, 오버라이딩은 이름만 비슷할 뿐, 완전히 다른 개념이다.

 

아래 코드 예시또한 참고해보자.

 

class cal{
    public int sum(int a1, int a2){
        return a1+a2;
    }

    public int sum(int a1, int a2, int a3){
        return a1+a2+a3;
    }
    }

class cal3 extends cal{
    public int sum(int a1, int a2){
        return a1-a2;
    }

}

public class test {
public static void main(String[] args) {
    cal c = new cal();
    System.out.println(c.sum(2,1)); // 오버라이딩
    System.out.println(c.sum(2,1,3)); // 오버로딩
   
    cal3 c3 = new cal3();
    System.out.println(c3.sum(2,1)); // 오버라이딩
    }
}
댓글