본문 바로가기
Programming 기초/Java

[Java] overloading vs overriding

by 뭉제 2023. 4. 17.
목차
1. overloading
2. overriding
3. 차이점

 

 

비슷해 보이는 용어인 overloading과 overriding의 차이는 무엇일까?

 

overloading


오버로딩(overloading)

· 한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성 

· 다음 조건을 모두 만족해야 한다.

  1. 메소드 이름이 동일

  2. 매개변수의 타입이나 개수가 서로 다르다.

  ** 리턴 타입이나 접근 제어자는 관계없다.

 

class Cal{
	public int sum(int n, int m) {
		return n+m;
	}
	//overloading
	public int sum(int n, int m, int o) {
		return n+m+o;
	}
}

오버로딩된 메소드를 호출할 때 컴파일러는 매개변수의 형식도 모두 보기 때문에 각각의 메소드를 구분할 수 있다.

 

 

overriding


오버라이딩(overriding)

· 상속 관계를 가진 클래스 사이에서 발생

· 부모 클래스의 메소드를 자식 클래스에서 재정의

   -> 메소드의 이름, 리턴 타입, 매개변수를 모두 동일하게 작성

· 부모 클래스의 메소드를 무시하고 자식 클래스에서 오버라이딩된 메소드를 무조건 실행

 

[제약 사항]

1. 부모 클래스의 메소드와 동일한 원형으로 작성

2. 부모 클래스 메소드의 접근 제어자보다 접근 범위를 좁혀 오버라이딩 불가

   - public > protected > default > private 순으로 접근 범위가 좁아진다.

   ex) 부모 클래스에 protected로 선언된 메소드 -> protected나 public으로만 오버라이딩 가능

3. static, private 또는 final 메소드는 오버라이딩 불가

 

class Cal {
	public int sum(int n, int m) {
		return n+m;
    }
} 

class Cal3 extends Cal {
	//overriding
	public int sum(int n, int m) {
		System.out.println("Cal3!!");
		return n+m;
	}
}

public class InheritanceApp {
	public static void main(String[] args) {
		Cal3 c3=new Cal3();
		System.out.println(c3.sum(2, 1));
	}
}

· new Cal3()에 의해 생성된 인스턴스에는 2개의 sum 메소드가 존재

· c3은 Cal3 타입 -> c3.sum(2, 1)을 실행하면 Cal3 클래스의 sum 메소드가 호출된다.

 

 

overloading과 overriding의 차이점

 

'Programming 기초 > Java' 카테고리의 다른 글

[Java] 예외  (0) 2023.04.23
[Java] super와 생성자  (0) 2023.04.20
[Java] 상속  (0) 2023.04.14
[Java] 생성자와 this  (0) 2023.04.11
[Java] 클래스와 인스턴스 - 활용  (0) 2023.04.08

댓글