[Java] 오버로딩 과 오버라이딩
Overloading 오버로딩
한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
오버로딩 조건
- 메서드 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.
- 리턴 값만 다른 것은 오버로딩 할 수 없다.
// 매개변수는 같지만 타입이 다르기 때문에 오버로딩 가능
int add(int a, long b) {return a + b;}
int add(long a, int b) {return a + b;}
public class Overloading {
public static void main(String[] args) {
Shape s = new Shape(); // 객체 생성
s.area(); // 메서드 호출
s.area(5);
s.area(10,10);
s.area(6.0, 12.0);
}
}
class Shape {
public void area() { // 메서드 오버로딩. 같은 이름의 메서드 4개.
System.out.println("넓이");
}
public void area(int r) {
System.out.println("원 넓이 = " + 3.14 * r * r);
}
public void area(int w, int l) {
System.out.println("직사각형 넓이 = " + w * l);
}
public void area(double b, double h) {
System.out.println("삼각형 넓이 = " + 0.5 * b * h);
}
}
//출력값
넓이
원 넓이 = 78.5
직사각형 넓이 = 100
삼각형 넓이 = 36.0
Overriding 오버라이딩
부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것
오버라이딩 조건
- 메서드 이름, 매개 변수, 리턴 값이 모두 같아야 함
- 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 함
- 예외는 상위 클래스의 메서드보다 많이 선언할 수 없음
public class OverridingTest {
public static void main(String[] args) {
Person person = new Person();
Child child = new Child();
Senior senior = new Senior();
person.scream();
child.scream();
senior.scream();
}
}
class Person {
void scream() {
System.out.println("꾸에엑");
}
}
class Child extends Person {
@Override
protected void scream() {
System.out.println("우에왥");
}
}
class Senior extends Person {
@Override
public void scream() {
System.out.println("끼엨에엑");
}
}
//꾸에엑
//우에왥
//끼엨에엑
Person 클래스에 scream() 메서드가 정의되어 있으며, Child, Senior 클래스에서 scream() 메서드를
재정의함으로서 Person 클래스의 run() 메서드를 오버라이딩하고 있음.
@Override는 ?
이는 어노테이션(Annotation)이라는 것으로 일반적인 주석과 다르게, 검증하는 기능을 한다.
@Override라는 어노테이션은 오버라이딩을 검증하는 기능을 한다. 코드상으로 검사했을 때 오버라이딩이 실제로 시행되지 않았다면 컴파일시 오류를 출력한다.
오버로딩과 오버라이딩의 차이점
- 오버로딩 - 기존에 없는 새로운 메소드를 추가하는 것
- 오버라이딩 - 상속받은 메소드를 재정의 하는 것
구분 | Overriding | Overloading |
---|---|---|
접근 제어자 | 부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정할 수 있다. | 모든 접근 제어자를 사용할 수 있다. |
리턴형 | 동일해야 한다. | 달라도 된다. |
메소드명 | 동일해야 한다. | 동일해야 한다. |
매개변수 | 동일해야 한다. | 달라야만 한다. |
적용 범위 | 상속관계에서 적용된다. | 같은 클래스 내에서 적용된다. |
댓글남기기