▶오버로딩이란?
→ 한 클래스 내에 동일한 이름의 메소드를 여러개 정의하는 것
👉 동일한 이름의 메소드를 정의한다고 해서 무조건 오버로딩인 것은 아닙니다!
오버로딩의 조건
→ 메소드 이름이 같아야 합니다.
→ 매개변수의 개수 혹은 타입이 달라야 합니다.
- 오버로딩 예제
int add(int x, int y, int z) {
int result = x + y + z;
return result;
}
long add(int a, int b, long c) {
long result = a + b + c;
return result;
}
int add(int a, int b) {
int result = a + b;
return result;
}
// 오버로딩의 조건에 부합하는 예제입니다.
- 오버로딩 아닌 예제
int add(int x, int y, int z) {
int result = x + y + z;
return result;
}
long add(int a, int b, int c) {
long result = a + b + c;
return result;
}
// 반환타입은 다르지만 매개변수의 자료형과 개수는 같기에 오버로딩이 아닙니다.
반환타입 : int / long
매개변수 : int x, int y, int z. / int a, int b, int c
반환타입은 다르지만 매개변수의 자료형과 개수(3개씩) 같아서 오버로딩이 아닙니다.
▶ 오버라이딩이란?
부모 클래스로부터 상속받은 메소드의 내용을 변경하는 것
→ 상속받은 메소드를 그대로 사용하기도 하지만, 필요에 의해 변경해야할 경우 오버라이딩을 합니다.
오버라이딩의 조건
→ 부모 클래스의 메소드와 매겨변수가 같아야 합니다.
→ 부모 클래스의 메소드와 반환타입이 같아야 합니다.
→ 부모 클래스의 메소드와 이름이 같아야 합니다.
public class A
{
int age = 10;
public void setAge(int age)
{
this.age = age;
}
}
class B extends A
{
public void setAge(int age)
{
this.age = age+20;
}
}
위에서 B클래스가 A클래스를 상속받고 있습니다. 상속 관계이므로 B에서는 setAge( ) 메서드를 그대로 사용할 수 있습니다. 하지만 여기에서는 메서드의 기능을 약간 변경해서 사용하고 있습니다.
-> age + 20;
이런 식으로 상속을 받은 부모의 메서드를 필요에 맞게 다시 정의해서 사용하는 것이 오버라이딩(Overriding) 입니다.
▶ 요약
오버라이드 (Override)
기각하다, 무시하다
'기존의 것을 무시하고 덮어쓰다' 를 의미
부모 클래스로부터 상속받은 메소드를 자식 클래스에서 확장 및 재정의 하는 것
동일한 이름의 메소드를 사용, 동작 방법만 재정의 (라이드. 즉, 버스 타듯이 부모 캐리받는다는 거)
1. 상위 클래스의 메소드여야 사용 가능
2. 메소드 이름이 같음
3. 파라미터 개수, 타입이 같음
4. 리턴 값의 데이터 타입도 같음
5. 오버라이드 하는 메소드와 행동이 동일하거나 추가 되어야 함
=> 상위 클래스(부모)의 것을 그대로 쓰거나 더 추가해서 사용(부모만큼 하거나 부모보다 더 발전한 자식이거나)
오버로드 (Overload)
과적(過積), 과부하(過負荷)
클래스의 상속 시, 기존에 없던 새로운 메서드를 추가하는 것
어떤 메소드의 구현 내용을 다양하게, 다른 형태로 동시에 제공하기 위해 사용
동일한 이름의 메소드를 파라미터만 바꿔서 여러 번 작성 (오버해서 쓴다라고 외우면 좋다.)
1. 메소드 이름이 같음
2. 리턴 값이 같거나 다름
3. 파라미터 개수 다름
파라미터 갯수가 같다면, 데이터 타입이 달라야 함
=> 이름만 같지 행동이나 리턴 값이 다름
▶ 오버로딩 vs 오버라이딩 (비교)
오버로딩 : 기존에 없는 이름이 같은 새로운 메소드를 정의하는 것 (new)
오버라이딩 : 상속받은 메소드의 내용을 변경하는 것 (change, modify)
'Java' 카테고리의 다른 글
Java - 객체지향언어 (추상클래스) (0) | 2022.10.25 |
---|---|
Java - 객체지향언어 (접근 제어자) (0) | 2022.10.25 |
Java - 객체지향언어 (상속) (0) | 2022.10.25 |
Java - 객체지향언어(생성자) (0) | 2022.10.25 |
Java - 객체지향언어(클래스, 인스턴스, 메소드) (0) | 2022.10.25 |