본문 바로가기
Java & 스프링/Java

[Java] 오버로딩, 오버라이딩

by hjhello423 2019. 4. 23.

자바의 오버로딩과 오버라이딩은 이름은 비슷하지만 아주 큰 차이를 가지고 있다.

이 둘의 개념과 차이점을 정리해 보자

 

 

 

메서드 오버로딩(Method overloading)

매개변수의 개수나 타입이 다를경우 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의할 수 있는 것을 말한다.

오버로딩은 아래의 조건을 따른다.

  • 메서드의 이름이 서로 같아야 한다.
  • 매개변수의 개수나 타입이 달라야 하며 순서가 달라도 상관없다.
public class Test {

    public static void main(String[] args) {
        System.out.println("메인 함수");
    }

    public void name(String arg1) {
    }

    public void name(String str, int num) {
    }

    public void name(int num, String str) {
    }

    public void name(int num, String str, boolean on) {
    }
    
}

 

 

오버라이딩(overriding)

조상 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩 이라고 한다.

조상에게서 상속받은 메서드를 상황에 맞게 변경하기 위해 사용된다.

오버라이딩은 아래의 조건을 따른다.

  • 조상클래스의 메서드와 이름이 같아야 한다.
  • 조상클래스의 메서드와 매개변수가 같아야 한다.
  • 조상클래스의 메서드와 리턴타입이 같아야 한다.
  • 접근 제어자는 조상클래스의 메서드 보다 좁은 범위로 변경할수 없다.
  • 조상클래스의 메서드 보다 많은 수의 예외를 선언할 수 없다.
import java.io.IOException;

public class Parent {

    int x;

    protected int add(int y) throws NullPointerException, IOException{
        return x + y;
    }
}


public class Child extends Parent {

    int x;

    protected int add(int y) throws NullPointerException {
        return x + y;
    }
}

위의 코드에서는 Child 클래스에 Exception도 선언이 불가하다.

Exception은 모든 예외의 조상이기 때문이다.

 

 

반응형

댓글