자바를 처음 접했을 때, 오버로딩과 오버라이딩을 구분하기가 매우 힘들었다.
그래서 혹시 필자와 같은 어려움을 가진 분들에게 조금이나마 도움이 됐으면 하는 마음으로 포스팅을 진행했다.
오버로딩(Overloading)
오버 로딩은 같은 메서드지만 매개 변수만 다르게 한다면 얼마든지 다른 기능을 하도록 할 수 있다.
조건
- 메소드의 이름은 같아야 한다.
- 매개 변수의 개수가 달라야한다.
- 만약 매개 변수의 개수가 같다면 데이터 타입이 달라야한다.
- 리턴형은 같아도 되고 달라도 된다.
오버로딩의 예를 예제를 보면 '아 ~ 이거구나'할 것이다.
예제
public class OverloadingEx {
public static void main(String[] args) {
Practice practice = new Practice();
practice.A(1); // 1
System.out.println(practice.A(1,2)); // 3
System.out.println(practice.A(1,2,3)); // 6
}
}
class Practice {
public void A(int a){
System.out.println(a);
}
public int A(int a, int b){
return a + b;
}
public int A(int a, int b, int c){
return a * b * c;
}
}
오버라이딩(Overriding)
오버라이딩은 상속 관계를 떠올리면 쉽게 이해할 수 있다.
부모 클래스를 상속 받은 자식 클래스는 부모 클래스에 있는 메서드를 선언되어 있는 대로 사용할 수 있고,
또 원하는 대로 재정의해서 사용이 가능하다.
예제
class Parent{
public void who(){
System.out.println("부모 클래스");
}
}
class Child extends Parent{
@Override
public void who(){
System.out.println("자식 클래스");
}
}
public class practice {
public static void main(String[] args) {
Parent parent = new Parent();
Child child= new Child();
child.who(); // 자식 클래스
parent.who(); // 부모 클래스
}
}
두 객체에서 who() 메서드를 통해 결과를 출력하면 같은 메서드이지만
자식 클래스와 부모 클래스의 결과가 다른 것으로 알 수 있고 자식 클래스에서 who() 메서드를 재정의했다는 것을 알 수 있다.
한 눈에 정리하기
구분 | 오버로딩 | 오버라이딩 |
메서드 이름 | 동일 | 동일 |
매개변수, 타입 | 다름 | 동일 |
리턴 타입 | 상관없음 | 동일 |
※ 도움을 주신 분
https://private.tistory.com/25
'Language > Java' 카테고리의 다른 글
[Java] 추상 클래스 VS 인터페이스 (0) | 2022.07.04 |
---|---|
[Java] static 키워드에 대해 알아보자 ! (0) | 2022.06.17 |
[Java]스트림(stream)(3/3) (0) | 2022.06.09 |
[Java]스트림(stream)(2/3) (0) | 2022.06.07 |
[Java]스트림(stream)(1/3) (0) | 2022.06.07 |