강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • CSS 박스 크기 설정
  • 알고리즘 공부
  • 백준
  • 자바
  • 메소드
  • CSS 속성
  • 메서드
  • til

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇
Langauge/Java-basic

[Java] 메서드 오버라이딩(Method Overriding)

[Java] 메서드 오버라이딩(Method Overriding)
Langauge/Java-basic

[Java] 메서드 오버라이딩(Method Overriding)

2022. 7. 31. 20:40

메서드 오버라이딩이란

메서드 오버라이딩(Method Overriding)은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것

출처 : MBC

메서드 오버라이딩을 학습하며 가장 떠오른 짤.. "이 메서드는 이제 제 겁니다. 제 마음대로 할 수 있는 것입니다."같은 느낌..

class Animal {
    public void cry() {
        System.out.println("울음소리");
    }
}
class Cat extends Animal {
    @Override
    public void cry() { // 상위 클래스의 cry() 오버라이딩
        System.out.println("냐옹~");
    }
}
class Dog extends Animal {
    @Override
    public void cry() { // 상위 클래스의 cry() 오버라이딩
        System.out.println("멍멍!");
    }
}

메서드 오버라이딩 조건

  • 상위 클래스의 메서드와 시그니처 및 리턴 타입이 동일해야 한다.
  • 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
    하위 클래스 접근 제어자 범위 >= 상위 클래스 접근 제어자 범위
  • 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다.

메서드 오버라이딩 메모리 구조

  1. 하위 클래스의 인스턴스를 생성하면 먼저 힙 메모리에 상위 클래스의 인스턴스가 생성
  2. 상위 클래스의 인스턴스 내부의 메서드는 인스턴스 메서드 영역에 생성
  3. 하위 클래스의 인스턴스가 상위 클래스를 포함하는 구조로 생성
  4. 하위 클래스 내부의 메서드도 동일하게 인스턴스 메서드 영역에 생성
  5. 이때 오버라이딩한 메서드는 기존에 있던 메서드를 덮어씀
  6. 상위 클래스의 인스턴스도 하위 클래스의 인스턴스도 동일한 메서드를 가리키고 있기 때문에 어떠한 타입으로 메서드를 호출해도 오버라이딩 된 메서드가 호출됨.
  7. 폴더 덮어쓰기를 예시로 생각하면 쉽게 이해 가능

메서드 오버라이딩 사용 이유

  • 메서드 오버라이딩의 특성을 이용하여 다형성을 더욱 증가시킬 수 있다.(코린이의 개인적인 생각)
    메서드 오버라이딩을 할 수 없으면 하위 클래스에서 일일이 정의를 해야 하며 상위 클래스의 타입으로 인스턴스를 생성하게 되면 다운 캐스팅을 하지 않고는 당연히 하위 클래스에서 정의한 기능을 사용할 수 없기 때문에..
  • 다형적 표현을 사용하여 모든 객체를 상위 클래스 타입으로 선언하여 배열로 관리할 수 있다.
public class Main {
    public static void main(String[] args) {
        // 각각의 타입으로 선언 및 인스턴스 생성
        Cat cat1 = new Cat();
        Dog dog1 = new Dog();
        Wolf wolf1 = new Wolf();

        cat1.cry();
        dog1.cry();
        wolf1.cry();

        // 상위 클래스 타입 + 하위 클래스 생성자
        Animal cat2 = new Cat();
        Animal dog2 = new Dog();
        Animal wolf2 = new Wolf();

        cat2.cry();
        dog2.cry();
        wolf2.cry();

        // 다형적 표현을 이용한 배열로 묶어 호출
        Animal[] animals = new Animal[]{new Cat(), new Dog(), new Wolf()};
        for (Animal animal : animals) {
            animal.cry();
        }
    }
}
class Animal {
    public void cry() {} // 오버라이딩을 하기 위해 정의한 메서드로 내용 생략 가능
}
class Cat extends Animal {
    @Override
    public void cry() { // Animal의 cry() 오버라이딩
        System.out.println("냐옹~");
    }
}
class Dog extends Animal {
    @Override
    public void cry() { // Animal의 cry() 오버라이딩
        System.out.println("멍멍!");
    }
}
class Wolf extends Animal {
    @Override
    public void cry() { // Animal의 cry() 오버라이딩
        System.out.println("아오오~~~");
    }
}

출력 결과

저작자표시 (새창열림)

'Langauge > Java-basic' 카테고리의 다른 글

[Java] 클래스의 정점, Object 클래스  (0) 2022.08.04
[Java] super 키워드와 super() 메서드  (0) 2022.08.03
[Java] instanceof : 캐스팅 가능 여부 확인  (0) 2022.07.30
[Java] 업 캐스팅과 다운 캐스팅  (0) 2022.07.30
[Java] 상속 관계와 포함 관계  (0) 2022.07.29
  • 메서드 오버라이딩이란
  • 메서드 오버라이딩 조건
  • 메서드 오버라이딩 메모리 구조
  • 메서드 오버라이딩 사용 이유
'Langauge/Java-basic' 카테고리의 다른 글
  • [Java] 클래스의 정점, Object 클래스
  • [Java] super 키워드와 super() 메서드
  • [Java] instanceof : 캐스팅 가능 여부 확인
  • [Java] 업 캐스팅과 다운 캐스팅
강잇
강잇
학습한 내용을 정리 및 기록하는 블로그

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.