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

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
반응형

'전공 > 객체지향프로그래밍' 카테고리의 다른 글

[객체지향프로그래밍][Java] 인터페이스의 구성 요소 심화 내용  (0) 2023.05.31
[객체지향프로그래밍][Java] 상속 3 (추상 메소드, 추상 클래스, 인터페이스)  (0) 2023.05.08
[객체지향프로그래밍][Java] 상속 1 (객체 생성, 접근 지정자, 업캐스팅, 다운캐스팅, instanceof 연산자)  (0) 2023.04.27
[객체지향프로그래밍][Java] 클래스와 객체 2 (접근 지정자, static, final)  (0) 2023.04.18
[객체지향프로그래밍][Java] 클래스와 객체 1 (클래스의 구성, 생성자, this, 객체 배열, 오버로딩, 가비지 컬렉션)  (0) 2023.04.18
'전공/객체지향프로그래밍' 카테고리의 다른 글
  • [객체지향프로그래밍][Java] 인터페이스의 구성 요소 심화 내용
  • [객체지향프로그래밍][Java] 상속 3 (추상 메소드, 추상 클래스, 인터페이스)
  • [객체지향프로그래밍][Java] 상속 1 (객체 생성, 접근 지정자, 업캐스팅, 다운캐스팅, instanceof 연산자)
  • [객체지향프로그래밍][Java] 클래스와 객체 2 (접근 지정자, static, final)
dev_ares
dev_ares
대학에서 컴퓨터공학을 전공하고 있는 학생입니다.
    반응형
    250x250
  • dev_ares
    노트
    dev_ares
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • IT 트랜드 (2)
      • 백엔드 (18)
        • Java + Spring (8)
        • Kotlin + Spring (5)
        • 백엔드 (5)
      • 프론트엔드 (1)
        • React (1)
      • 대외활동 (17)
        • 42서울 (17)
      • 백준 (6)
        • Java (2)
        • C++ (3)
      • 전공 (121)
        • 객체지향프로그래밍 (17)
        • 자료구조 (23)
        • 리눅스시스템관리 (16)
        • 컴퓨터구조 (25)
        • 네트워크 (25)
        • 데이터베이스 (15)
        • 기타 전공 (0)
      • 프로그래밍 언어 (18)
        • Java (5)
        • Swift (4)
        • C++ (1)
        • Kotlin (8)
      • 기타 (4)
      • 공군 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    반복자
    42서울
    데이터패스
    자바
    자료구조
    컴퓨터 구조 및 설계
    명령어
    오블완
    추가 문제
    메모리 계층 구조
    코틀린
    컴공 포트폴리오
    단일 사이클
    컴퓨터구조
    티스토리챌린지
    백준
    C++
    상속
    리눅스
    사설 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev_ares
[객체지향프로그래밍][Java] 상속 2 (오버라이딩)
상단으로

티스토리툴바