목차
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 |
댓글