오버로딩(Overloading)
오버로딩은 같은 이름의 메서드를 중복으로 선언하지만 각 매서드들은 다른 매개변수의 타입과 수를 가지도록 하는 방식입니다.
오버로딩의 특징은
- 메서드의 이름이 같아야함.
- 파라미터의 개수가 달라야함. (파라미터의 개수가 같다면 타입이 달라야함)
- 리턴형은 같아도 OK 달라도 OK
예시
public class blog {
public static void main(String[] args) {
OverloadingMethod overloading = new OverloadingMethod();
overloading.method(); // 매개변수가 없는 method 함수
overloading.method(1); // 매개변수가 int형 변수 하나인 method 함수
overloading.method(1, 2); // 매개변수가 int형 변수 두 개인 method 함수
overloading.method("1"); // 매개변수가 String형 변수 하나인 method라는 함수
overloading.method(1, "2"); // 매개변수가 int형 변수 하나와 String형 변수 하나인 method 함수
}
}
class OverloadingMethod {
void method() {
System.out.println("매개변수가 없는 method 함수");
}
void method(int x) {
System.out.println("매개변수가 int형 변수 하나인 method 함수");
}
void method(int x, int y) {
System.out.println("매개변수가 int형 변수 두 개인 method 함수");
}
void method(String x) {
System.out.println("매개변수가 String형 변수 하나인 method라는 함수");
}
void method(int x, String y) {
System.out.println("매개변수가 int형 변수 하나와 String형 변수 하나인 method 함수");
}
}
OverloadingMethod라는 클래스 내에 method라는 이름의 함수 5개를 오버로딩 하였습니다.
각 매개변수가 없는 함수, 매개변수가 int형 변수 하나인 함수, 매개변수가 int형 변수 두 개인 함수, 매개변수가 String형 변수 하나인 함수 , 매개변수가 int형 변수 하나, String형 변수 하나인 함수입니다.
메인 함수에서 OverLoadingMethod 객체를 생성 후 method 함수를 다음과 같이 다섯 번 호출 하였습니다.
각 매개변수 없음, 매개변수 숫자 1, 매개변수 숫자 1과 2, 매개변수 문자 1, 매개변수 숫자1과 문자 2로 함수를 호출하였는데 아래와 같이 각 매개변수에 맞는 함수가 실행되는 것을 볼 수 있습니다.
overloading.method(); // 매개변수가 없는 method 함수
overloading.method(1); // 매개변수가 int형 변수 하나인 method 함수
overloading.method(1, 2); // 매개변수가 int형 변수 두 개인 method 함수
overloading.method("1"); // 매개변수가 String형 변수 하나인 method라는 함수
overloading.method(1, "2"); // 매개변수가 int형 변수 하나와 String형 변수 하나인 method 함수
오버라이딩(Overriding)
오버라이딩은 상속 관계에 있는 클래스 간 같은 이름의 메소드를 재정의하는 방식입니다.
부모 클래스에 있는 메서드와 자식 클래스에 있는 메서드의 이름, 매개변수(개수, 타입), 반환형(리턴 타입)이 같은 경우 오버라이딩을 할 수 있습니다.
오버라이딩의 특징
- 오버라이드 하고자 하는 메서드가 상위 클래스에 존재해야함.
- 메서드의 이름, 파라미터의 개수와 타입, 리턴 타입이 같아야함.
- super. 을 이용하여 부모클래스의 정보를 가져올 수 있음.
예시
public class blog {
public static void main(String[] args) {
People kim = new People();
kim.name = "킴";
kim.age = 14;
Korean soopeach = new Korean();
soopeach.name = "수피치";
soopeach.age = 24;
soopeach.From = "한국";
Korean joon = new Korean();
joon.name = "준";
joon.age = 24;
joon.From = "한국";
soopeach.introduce();
// 안녕 내 이름은 수피치이고 나이는 24살이야. 만나서 반가워!
// 한국에서 왔어!
joon.introduce();
// 안녕 내 이름은 준이고 나이는 24살이야. 만나서 반가워!
// 한국에서 왔어!
kim.introduce();
// 안녕 내 이름은 킴이고 나이는 14살이야. 만나서 반가워!
}
}
class People {
public String name;
public int age;
public void introduce() {
System.out.println("안녕 내 이름은 " + this.name + "이고 나이는 " + this.age + "살이야. 만나서 반가워!");
}
}
class Korean extends People {
String From;
@Override
public void introduce() {
super.introduce();
System.out.println(this.From + "에서 왔어!");
}
}
People이라는 클래스는 name, age 라는 변수를 가지고 this.name / this. age를 호출하는 introduce함수가 있습니다.
Korea 이라는 클래스는 이 People 클래스를 상속받고 @Override를 사용하여 부모 클래스의 introduce함수를 오버라이딩 하였습니다.
super.introduce() 를 사용하여 부모 클래스인 People의 introduce를 호출하고 this.From 에서 왔다고 출력해주는 기능을 추가해주었습니다.
soopeach.introduce();
// 안녕 내 이름은 수피치이고 나이는 24살이야. 만나서 반가워!
// 한국에서 왔어!
joon.introduce();
// 안녕 내 이름은 준이고 나이는 24살이야. 만나서 반가워!
// 한국에서 왔어!
kim.introduce();
// 안녕 내 이름은 킴이고 나이는 14살이야. 만나서 반가워!
따라서 위와 같은 결과가 출력되게 되는데
@Override
public void introduce() {
System.out.println(this.From + "에서 왔어!");
}
Korean 클래스에서 오버라이드한 introduce 함수에서 super.introduce 함수를 위와같이 지우게 된다면
soopeach.introduce();
// 한국에서 왔어!
joon.introduce();
// 한국에서 왔어!
kim.introduce();
// 안녕 내 이름은 킴이고 나이는 14살이야. 만나서 반가워!
이와 같은 결과가 출력되게 됩니다.
'정보[Information]' 카테고리의 다른 글
맥북 homebrew로 mysql 설치 및 세팅하기 (0) | 2022.04.13 |
---|---|
iterm zsh: command not found: brew 에러 (0) | 2022.04.13 |
HTML 블록 태그 / 인라인 태그 (Block Tag / Inline Tag) (0) | 2022.04.06 |
신장 트리(Spanning Tree) / 크루스칼 알고리즘(Kruskal Algorithm)(Python - 파이썬) (0) | 2022.03.06 |
서로소 집합 자료구조(Union-Find)(Python-파이썬) (0) | 2022.03.05 |
최근댓글