-> 블로그 이전

[Java] 메소드 오버라이딩

2021. 11. 24. 16:53Language`/Java

메소드 오버라이딩 (Method Overriding)

- 슈퍼 클래스에 선언된 메소드같은 이름/리턴 타입/매개 변수 리스트를 갖는 메소드서브 클래스에서 재작성 

- 슈퍼 클래스의 메소드를 '무시하기/덮어쓰기'

- 슈퍼 클래스 메소드의 접근 지정자보다 무조건 접근 범위가 같거나 넓어야 한다 

- static/private/final로 선언된 메소드는 오버라이딩 X

 

※ 동적 바인딩

- 실행할 메소드를 컴파일 시(Compile time)에 결정하지 않고, 실행 시(Run time)에 결정  

- 슈퍼 클래스의 메소드를 무시하고, 서브 클래스에서 오버라이딩한 메소드가 무조건 실행 

 

 

 

※ Example

class Shape{
    public void draw(){
        System.out.println("Shape");
    }
}

class Line extends Shape{
    @Override
    public void draw(){
        System.out.println("Line");
    }
}

class Rect extends Shape{
    @Override
    public void draw(){
        System.out.println("Rect");
    }
}

class Circle extends Shape{
    @Override
    public void draw(){
        System.out.println("Circle");
    }
}

public class test {
    static void paint(Shape p){
        p.draw();
    }
    public static void main(String[] args) {
        Shape p = new Shape();
        paint(p);
        paint(new Line());
        paint(new Rect());
        paint(new Circle());
    }
}
-------------------------
Shape
Line
Rect
Circle

 

 

메소드 오버로딩 / 메소드 오버라이딩

  메소드 오버로딩 메소드 오버라이딩
선언 같은 클래스나 상속 관계에서
동일한 이름의 메소드를 중복 작성
서브 클래스에서 슈퍼 클래스에 있는 메소드와
동일한 이름의 메소드 재작성
관계 동일 클래스 / 상속 관계 상속 관계
목적 이름이 같은 여러 개의 메소드를
중복 작성해서 편리성 향상
-> 다형성 실현
슈퍼 클래스에 구현된 메소드를 무시하고,
서브 클래스에서 새로운 기능의 메소드를 재정의
-> 다형성 실현
조건 메소드 이름 반드시 동일
매개변수 타입/개수가 달라야 한다
메소드 이름/매개변수 타입,개수/리턴 타입
모두 동일
바인딩 정적 바인딩
- 호출될 메소드는 컴파일 시에 결정
동적 바인딩
- 실행 시간에 오버라이딩된 메소드를 찾아서 호출