[정리] Overloading 과 Overriding에 대해 알아보자!

Wook _·2023년 9월 13일
0

정리

목록 보기
9/13

Overloading and Overriding!

서로 헷갈리는 단어이다.

여기서 더 자세히 설명하면 더 헷갈리니까,
바로 분리해서 각각 알아보자.


1. Overloading!

오버로딩은 사전적으로 '과적하다'라는 의미다.

자바에서 오버로딩은 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라고 매개변수의 개수 또는 반환 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

오버로딩의 조건은 다음과 같다.

  • 메소드의 이름이 같아야 한다.
  • 매개변수의 개수나 반환 타입이 달라야 한다.

주의할 점은 '리턴 값'만 다른 것은 오버로딩 할 수 없다.

class Test{
	// 1번
	private void print(){
    	System.out.println("와우1");
    }
    
    // 2번
    private int print(int num){
    	System.out.println("와우" + num);
        return num;
    }
   	
    // 3번
    //이건 안된다는 뜻이다. 2번과 리턴 값만 다르기 때문이다.
    private int print(int num){
    	System.out.println("와우" + num);
        return 0;
    }
}

왜 우리는 오버로딩을 사용할까?

  • 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.
  • 메소드의 이름을 절약할 수 있다.

2.Overriding

오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는것이다.

상속받은 메소드를 그대로 사용할 수 있지만, 자식 클래스에서 상황에 맞게 변경해야 하는 경우 오버라이딩이 필요하다.

오버라이딩의 조건

오버라이딩을 하고자 하는 메소드는 다음과 요소들이 같아야 한다.

  • 메소드의 이름
  • 매개 변수
  • 리턴 값

위 세 가지가 모두 같아야 오버라이딩을 할 수 있다.

class Person{
	void cry(){
    	System.out.println("운다");
	}
}

class Child extends Person{
	@Override
    protected void cry(){
    	System.out.println("겉으로 운다");
    }
}

class Adult extends Person{
	@Override
    protected void cry(){
    	System.out.println("속으로 운다"):
    }
}

여기서 @Override 는 어노테이션으로 직역하면 주석이라는 것이다.

일반적인 주석과 달리 검증하는 기능을 한다.
@Override는 오버라이딩을 검증하는 기능을 한다.

오버라이드는 내용만 새로 정의하는 것이므로 선언부는 부모와 같아야 한다.

위의 코드에서 접근 제어자를 다르게 설정해 놓았는데, 오버라이딩은 접근 제어자를 설정하는 규칙이 존재한다.

규칙은 다음과 같다.

  • 자식 클래스에서 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.
  • 예외(Exception)는 부모 클래스의 메소드보다 많이 선언할 수 없다.
  • static 메소드를 인스턴스의 메소드로, 혹은 그 반대로 바꿀 수 없다.

이상으로 Overloading 과 Overriding에 대해 알아보았다.

헷갈리지 않도록 숙지하도록 하자.

끝!


출처

https://hyoje420.tistory.com/14

profile
책상 위에 있는 춘식이 피규어가 귀엽다.

0개의 댓글