스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

오버로딩 vs 오버라이딩 본문

개발/Java, SpringFramework

오버로딩 vs 오버라이딩

워너-비 2018. 5. 21. 22:54

오버로딩과 오버라이딩에 대해 알아보자


오버로딩(overloading)은 두 메서드가 같은 이름을 갖고 있으나 인자(매개변수)의 수나 자료형이 다른 경우를 지칭한다.

메서드 인자에 어떤 값이 쓰이느냐에 따라서 다른 메서드가 호출된다.


1
2
3
public int funcA(Circle c){ ... }
public int funcA(Square s){ ... }
public int funcA(Square s1, Square s2){ ... }



오버라이딩(overriding)은 상위 클래스의 메서드와 이름과 signature가 같은 함수를 하위 클래스에 재정의하는 것을 말한다.

메서드를 오버라이드 하면 자식클래스에서 정의한 메서드가 호출된다.

부모 클래스에서 정의한 메서드도 유효하다. (super 키워드를 이용하여 호출 가능)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// printMe(), computeArea() 메서드를 가진 Shape 클래스
public abstract class Shape{
    public void printMe() {
        System.out.println("I am a shape.");
    }
    public abstract double computeArea();
}
 
// Shape를 상속받는 Circle 클래스
public class Circle extends Shape {
    public double rad = 5;
    // 메서드 재정의
    public void printMe() {
        System.out.println("I am a circle.");
    }
    public double computeArea() {
        return rad * rad * 3.15;
    }
}
 
// Shape를 상속받는 Ambiguous 클래스
public class Ambiguous extends Shape {
    private double area = 10;
    public double computeArea() {
        return area;
    }
}
 
public class IntroductionOverriding {
    public static void main(String[] args){
        Shape[] shapes = new Shape[2];
        Circle circle = new Circle();
        Ambiguous ambiguous = new Ambiguous();
 
        shapes[0= circle;
        shapes[1= ambiguous;
 
        for(Shape s : shapes) {
            s.printMe();
            System.out.println(s.computeArea());
        }
    }
}



출력결과





I am a circle.
78.75
I am a shape.
10.0





Comments