이번 시간에는 헷갈리기 쉬운 개념인 Overloading과 Overriding에 대해서 정리해보고자 합니다.
Overloading
메소드 이름은 같지만, 파라미터 수, 타입은 다른 메소드를 중복으로 선언하는 것을 말합니다.
이러한 Overloading은 다음과 같은 특징을 가집니다.
- 메소드 이름이 같아야 합니다.
- 반환형은 같아도 되고, 달라도 됩니다.
- 파라미터 개수가 달라야 합니다. 파라미터 개수가 같은 경우, 각 데이터 타입이 달라야 합니다.
public class OverloadingTest {
void test() {
System.out.println("매개변수가 없는 test()");
}
void test(int a, int b) {
System.out.println("매개변수 " + a + "와 " + b + "를 받는 test()");
}
void test(double d) {
System.out.println("double형 매개변수" + d + "를 받는 test()");
}
void test(int c) {
System.out.println("int형 매개변수" + c + "를 받는 test()");
}
}
public class OverloadingExample {
public static void main(String[] args) {
OverloadingTest ob = new OverloadingTest();
ob.test();
ob.test(10, 20);
ob.test(50);
ob.test(123.4);
}
}
// 출력결과
매개변수가 없는 test()
매개변수 10와 20를 받는 test()
int형 매개변수 50를 받는 test()
double형 매개변수 123.4를 받는 test()
Overriding
부모 클래스의 메소드의 동작 방법을 재정의하여 우선적으로 사용하는 것을 말합니다.
이는 상속 관계에 있는 클래스 간 같은 이름의 메소드를 정의하는 기술로, 하나의 코드로 여러 객체를 처리할 수 있게 됩니다.
이러한 Overriding은 다음과 같은 특징을 가집니다.
- 오버라이드하고자 하는 메소드가 상위 클래스에 존재해야 합니다.
- 메소드 이름이 같아야 하고, 파라미터 개수, 데이터 타입, 반환형이 같아야 합니다.
- 상위 클래스의 메소드와 동일하거나, 내용이 추가되어야 합니다.
public class People {
public String name;
public int age;
public void print() {
System.out.println("이름은 " + this.name + "이고, 나이는 " + this.age + "입니다.");
}
}
public class Student extends People {
String job;
public void print() {
System.out.println("이름은 " + this.name + "이고, 나이는 " + this.age + "입니다.");
System.out.println(this.name + "은 " + this.job + "입니다.");
}
}
public class OverridingExample {
public static void main(String[] args) {
Student st = new Student();
st.name = "codingjavaman";
st.age = 25;
st.job = "학생";
st.print();
}
}
// 출력결과
이름은 codingjavaman이고, 나이는 25입니다.
codingjavaman은 학생입니다.
정리하자면,
Overloading은 한 클래스 내에, 여러 개의 같은 이름의 메소드를 정의하는 것으로, 메소드의 이름을 동일하게 해 프로그램의 가독성을 증가시킬 수 있습니다.
Overriding은 부모 클래스로부터 받은 메소드의 로직을 변경시키는 것으로, 객체 지향 언어의 특징 중 다형성을 활용한 예입니다.
이렇게 Overloading과 Overriding에 대해 알아보았습니다.
읽어주셔서 감사하고, 잘못된 점이나 질문 있으시면 편하게 댓글 남겨주세요 🙂
'Java지식' 카테고리의 다른 글
Java의 effectively final이란? (3) | 2023.06.10 |
---|---|
기본 자료형과 참조 자료형 (7) | 2022.11.30 |
절차적 프로그래밍과 객체 지향 프로그래밍 (1) | 2022.08.22 |