전공/객체지향프로그래밍

[객체지향프로그래밍][Java] 상속 2 (오버라이딩)

Campus Coder 2023. 4. 27. 16:28
728x90
반응형

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

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

메소드 오버라이딩 사례

class Shape {
    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");
    }
}

Shape 클래스의 draw() 메소드를 Line, Rect, Circle 클래스에서 각각 오버라이딩한 사례

 

Line line = new Line();
line.draw(); //실행 결과 -> Line

Line에서 오버라이딩 한 메소드가 호출됨

 

Shape shape = new Line();
shape.draw(); //실행 결과 -> Line

업케스팅에 의해 슈퍼 클래스 레퍼런스로 오버라이딩된 메소드 호출(동적 바인딩)

 

오버라이딩의 목적, 다형성 실현

오버라이딩

- 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 구현하는 기ㅡㄴㅇ

- 상속을 통해 '하나의 인터페이스(같은 이름)에 서로 다른 내용 구현'이라는 객체 지향의 다형성 실현

 

실행 시간 다형성 실현

- 동적 바인딩을 통해 실행 중에 다형성 실현(컴파일 타임)

 

동적 바인딩

실행할 메소드를 실행 시(run time)에 결정

오버라이딩 메소드가 항상 호출

 

super 키워드

  • super는 슈퍼 클래스의 맴버를 접근할 때 사용되는 레퍼런스
  • 서브 클래스에서만 사용
  • 슈퍼 클래스의 메소드 호출
  • 컬파일러는 super의 접근을 정적 바인딩으로 처리

 

오버라이딩 오버로딩

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

 

728x90
반응형