728x90

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

  • 슈퍼 클래스의 메소드를 서브 클래스에서 재정의
    • 슈퍼 클래스 메소드 명, 매개변수 타입 및 개수, 리턴 타입, 접근 지정자 등 모든 것을 동일하게 작성
    • (= 메소드 무시하기, 덮어쓰기)
    • 서브 클래스에 오버라이딩된 메소드가 무조건 실행되는 것동적 바인딩 발생

└ 내/외부에서 메소드2()의 호출이 발생해도 무조건 서브 클래스의 메소드2()가 호출된다.

 


└ draw() 메소드의 오버라이딩 사례


오버라이딩 조건

  • 부모 클래스의 메소드와 메소드 명, 매개변수 타입 및 개수, 리턴 타입, 접근 지정자 등의 시그니처가 모두 동일해야 함
  • 접근 제한을 더 좁게 수정 불가
    • _public_이나 _default_나 _private_로 수정 불가
  • 추가적인 예외 (Exception)가 발생할 수 있음을 나타낼 수 없음.오버라이딩이 불가능한 경우

오버라이딩이 불가능한 경우

  • private 메소드
    • 부모 클래스 전용이므로 자식 클래스에 상속되지 않음
  • static 메소드
    • 클래스 소속이므로 자식 클래스에 상속되지 않음
  • final 메소드
    • final 메소드는 더 이상 수정불가

다형성 실현

  • 슈퍼 클래스에 선언된 메소드를 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 기능
  • 상속을 통해 '하나의 인터페이스(같은 이름)에 서로 다른 내용 구현' 이라는 객체 지향의 다형성 실현
  • 오버라이딩 : 실행 시간 다형성
  • 오버로딩 : 컴파일 타임 다형성
Ex1
class Shape {
    public Shape next;
    public Shape() {next = null; }

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

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

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

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

public class MethodOverridingEx {
    static void paint(Shape p){
        p.draw(); //p가 가리키는 객체 내의 draw()호출 (: 동적 바인딩)
    }

    public static void main(String[] args) {
        Line line = new Line();
        paint(line);
        paint(new Shape());
        paint(new Line());
        paint(new Rect());
        paint(new Circle());
    }
}


오버라이딩의 활용

  • 연결된 링크드 리스트 형태로 생성가능
  • start 와 last 에 레퍼런스를 넣어서 리스트 연결 리스트 형태로 구현가능

Ex2 (Ex1 활용)
public class UsingOverride {
    public static void main(String[] args) {
        Shape start, last, obj;
        start = new Line();
        last = start;
        obj = new Rect();
        last.next = obj;
        last = obj;
        obj = new Line();
        last.next = obj;
        last = obj;
        obj = new Circle();
        last.next = obj;
        Shape p = start;
        while(p != null) {
            p.draw();
            p = p.next;
        }

    }
}

오버로딩 VS 오버라이딩

 

 

 


 

 

메소드 오버라이딩

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

www.notion.so

 

아래 노션 페이지에 자바 공부 내용에 대해 업로드 합니다!

수정사항이나 질문사항의 경우 노션 댓글로 남겨주세요!(*•̀ᴗ•́*)و ̑̑

 

 

JAVA 이론 정리

주석 단축키 주석 처리하고 싶은 부분을 블록 처리하고 ‘Ctrl+Shift+ / ’를 누르면 /* */로 주석 처리가 됩니다. 주석을 해제하고 싶은 부분을 블록 처리하고 ‘ Ctrl+Shift+ \ (원 표시 혹은 역슬러시)

www.notion.so

 


개발 환경

Intellij

 

작성 플랫폼

Notion

 

728x90