메서드 Overloading과 메서드 Overriding
메서드 Overloading
- 하나의 클래스에 동일한 이름의 메서드가 여러개 중복 정의되는 것(단, 변수의 중복 정의는 불가능)
- 매개변수의 개수와 타입 혹은 순서만 다르다면 동일한 이름의 메서드라도 다른 기능을 수행할 수 있다는 개념
메서드 Overloading 조건
조건 | 가능 여부 |
---|---|
매개변수의 개수와 타입이 다른 경우 | O |
리턴 타입이 다른 경우 | X |
매개변수의 이름이 다른 경우 | X |
매개변수의 개수와 타입이 같지만, 순서가 다른 경우 | O |
매개변수가 형변환된 다른 타입인 경우 | O |
생성자 Overloading
클래스로부터 객체를 생성할 때, 필요한 변수만 적절히 조합하여 초기화하기 위해 생성자 Overloading을 지원
Java
class Employee {
String name; // 이름
int age; // 나이
int salary; // 급여
// 기본 생성자
public Employee() {
}
// 이름, 나이 초기화 생성자
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
// 이름, 급여 초기화 생성자
// 매개변수 개수와 타입이 위의 생성자와 동일하므로 에러발생!
// 따라서 순서를 바꿔줘야 함
public Employee(int salary, String name) {
this.salary = salary;
this.name = name;
}
메서드 Overriding
- 부모 클래스에 정의된 메서드를 자식 클래스에서 수정(재정의)하여 사용하는 것
- 부모의 메서드를 자식이 논리적으로 재정의 함
- 부모의 메서드, 해당 부모를 상속받은 모든 자식들의 메서드가 그대로 존재
- 단순히 자식 클래스에 새로운 메서드를 만들 경우 : 물리적 - 2개 메서드, 논리적 - 2개 메서드(2개의 메서드가 모두 실행됨)
- 자식 클래스에서 메서드 재정의할 경우 : 물리적 - 2개 메서드, 논리적 - 1개 메서드(재정의한 메서드가 부모 메서드를 덮어써서 자신의 메서드만 실행되는 효과)
메서드 Overriding 조건
- 메서드 명이 동일해야 함
- 매개변수의 개수, 타입, 순서가 동일해야 함
- 리턴 타입이 동일해야 함
- 접근지정자는 부모보다 넓거나 같게 지정해야 함
- 예외처리는 부모보다 작거나 같게 지정해야 함
메서드 Overloading과 Overriding
- 메서드 Overloading : 하나의 클래스에 동일한 이름의 메서드가 여러 개 중복 정의되어 있는 것, 추가 적재
Java
class SuperClass {
void print(String str) {
System.out.prinln("SuperClass의 print(String s) 호출");
}
}
class SubClass extends SuperClass {
void print() { // 부모 클래스 메서드와 매개변수가 다르므로 Overloading에 해당
System.out.prinln("SubClass의 print() 호출");
}
}
- 메서드 Overriding : 상속 관계에서 부모가 가진 메서드가 자식 클래스에 새롭게 정의되어 있는 것, 재정의
Java
class Camera {
String name;
int sheets;
public void takePicture() {
System.out.prinln(name + "로 " + sheets + "번 찍음");
}
}
class PolaroidCamera extends Camera {
int batteryGage;
public void takePicture() { // 부모 클래스 메서드와 매개변수가 같으므로 Overriding에 해당
System.out.prinln(name + "로 " + sheets + "번 찍음");
// super.takePicture(); // super() 예약어를 사용할 경우 부모 클래스 메서드 상속 가능
System.out.prinln("현재 배터리 : " + batteryGage + "%");
}
}