반응형
Overloading 이란?
- 메소드의 이름은 같지만, parameter의 개수나 타입을 달리하여 새로운 메소드를 정의
- 상속관계에서 부모 클래스의 메소드와 접근제한자, return type, 함수명, 파라미터 등은 같고 body만 달라야 함
Overriding 이란?
- 부모 클래스의 메소드를 자식 클래스에서 필요에 맞춰 재정의
Overloading 예제
public class Main {
public static void main(String[] args) {
System.out.println(add(10, 7)); // 17 출력
System.out.println(add(10, 7, 5)); // 22 출력
System.out.println(add(10.3, 5.2)); // 15.5 출력
}
static int add(int x, int y) {
return x + y;
}
static int add(int x, int y, int z) {
return x + y + z;
}
static double add(double x, double y) {
return x + y;
}
}
- add를 3번 사용했지만, 모두 다른 add 메소드에서 값을 받아옴
- 이처럼 메소드의 이름은 같지만 parameter의 개수나 타입에 따라 다른 메소드를 호출하는 것이 Overloading
Overriding 예제
public class Main {
public static void main(String[] args) {
Circle circle = new Circle();
Rectangle rectangle = new Rectangle();
circle.draw(); // 원을 그립니다.
rectangle.draw(); // 도형을 그립니다.
}
static class Shape {
void draw() {
System.out.println("도형을 그립니다.");
}
}
static class Circle extends Shape {
@Override
void draw() {
System.out.println("원을 그립니다.");
}
}
static class Rectangle extends Shape {
}
}
- 위 코드에서 Circle은 Shape를 상속받고, draw 메소드를 Overriding해서 다른 기능을 제공
- Rectangle은 Shape를 상속받고 Overriding은 해주지 않았기 때문에, draw 메소드 호출시 부모의 draw 메소드가 호출됨
- 이 때 Circle에서 @Override 어노테이션을 사용했는데, 사실 이 어노테이션은 안 써줘도 정상 작동함
- 다만 이 메소드가 오버라이딩 되었다고 표시하기 위해 개발자들간의 약속 느낌으로 사용
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크 - 1. Map (+ value값으로 검색) (0) | 2022.04.12 |
---|---|
[JAVA] 컬렉션 프레임워크 (Collection Framework) (0) | 2022.04.12 |
[JAVA] 상속(Inheritance), super (0) | 2021.08.17 |
[JAVA] 접근 제한자, 정보은닉, Static, psvm (0) | 2021.08.17 |
[JAVA] 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2021.08.16 |