[Java] 상속 Inheritance - 3 (Type Conversion 형변환, Polymorphism 다형성)

2024. 4. 15. 19:33·CS/Java
목차
  1. Implicit Type Conversion 묵시적 형변환
  2. Explicit Type Conversion 명시적 형변환
  3. Polymorphism 다형성
  4. Field Polymorphism
  5. Parameter Polymorphism

Implicit Type Conversion 묵시적 형변환

자식 클래스가 부모 클래스로 자동 형변환 되는 경우

자식 클래스의 객체였던 c가 부모 클래스의 객체인 p에 대입되면서 형변환 이루어짐

 
만약, 자식 클래스에서 부모 클래스의 함수를 override 했을 때, 부모클래스로 형변환된 자식클래스의 객체는 어떤 함수를 사용하게 될까?

parent를 출력하는 메서드를 child를 출력하도록 overriding
결과는 child 출력

 
즉, 자식 객체에서 부모 객체로 형변환이 일어나더라도, 함수는 overriding된 자식 클래스의 함수를 사용하게 된다는 것
 
 

Explicit Type Conversion 명시적 형변환

부모 객체에서 자식 객체로 형변환이 일어나는 것
이 때에는 직접 형변환 제시를 명시해주어야 함
 
자식 객체가 먼저 부모 객체로 형변환 된 후에, 그 객체를 다시 자식 객체로 형변환 하는 경우에만 가능하다!
이렇게 하지 않으면 ClassCastExeption이 발생한다.

부모 type에 먼저 자식 type이 할당 되어 형변환을 겪어야만 가능
이렇게도 가능!

 
즉, 변형하고자 하는 부모 객체는 이미 한번 자식 객체에서 변환이 이루어진 과거가 존재해야한다.
 
반대로, 만약, 자식 클래스에서 부모 클래스의 함수를 override 했을 때, 자식클래스로 형변환된 부모클래스의 객체는 어떤 함수를 사용하게 될까?

마찬가지로 override된 함수를 출력

 
마찬가지로, override된 함수를 출력하게 된다.
이 객체는 처음에 자식 객체에서 부모 객체로 변형 되었다가, 다시 자식 객체로 변형 되었다고 볼 수 있기 때문이다.
그리고 이런 식으로 자식 객체로 형변환된 부모 객체는 자식 클래스의 필드와 메서드를 사용할 수 있다.
 
 

Polymorphism 다형성

다형성을 설명하기 위해, 묵시적 형변환(자식->부모)와 overriding을 이용할 수 있다.
 

Field Polymorphism

부모 클래스인 Tire와 자식 클래스인 HankookTire, KumhoTire
Car 클래스의 필드에 Tire이 있음

 
car1을 예시로 들면, tire에 new HankookTire을 넣음으로써 묵시적 형변환(HankookTire -> Tire)이 일어난다.
자식 객체에서 부모 객체로 묵시적 형변환이 일어나더라도 overriding된 함수를 사용하기 때문에 "한국 타이어"를 출력한다.

결

 

Parameter Polymorphism

파라미터 내에서 묵시적 형변환이 일어날 수 있음

부모 Food 클래스와 자식인 Cake, Apple
Human 클래스
main
결과

 
위 처럼 파라미터 내에서 자식 객체를 넣으면 부모 객체로 묵시적 형변환이 일어나 함수가 수행된다.
이 때, override된 함수를 사용하게 된다.

'CS > Java' 카테고리의 다른 글

[Java] interface 인터페이스  (0) 2024.05.26
[Java] 상속 Inheritence - 4 (다운 캐스팅과 instanceof, abstract class 추상 클래스, sealed class)  (0) 2024.04.17
[Java] 상속 Inheritance - 2 (Final Class, Final Method, protected 제어자)  (0) 2024.04.15
[Java] 상속 Inheritance - 1 (extends, super)  (0) 2024.04.06
[Java] Class 클래스 - 2 (정적 변수 static, 상수 final, 패키지, 접근 제어자 private-public-protected, getter & setter)  (0) 2024.04.06
  1. Implicit Type Conversion 묵시적 형변환
  2. Explicit Type Conversion 명시적 형변환
  3. Polymorphism 다형성
  4. Field Polymorphism
  5. Parameter Polymorphism
'CS/Java' 카테고리의 다른 글
  • [Java] interface 인터페이스
  • [Java] 상속 Inheritence - 4 (다운 캐스팅과 instanceof, abstract class 추상 클래스, sealed class)
  • [Java] 상속 Inheritance - 2 (Final Class, Final Method, protected 제어자)
  • [Java] 상속 Inheritance - 1 (extends, super)
1in
1in
1in
Love IT!
1in
전체
오늘
어제
  • 분류 전체보기 (52)
    • BackEnd (9)
      • Django (3)
      • AWS (0)
      • Error (2)
    • 문제 풀이 (7)
      • Baekjoon (7)
    • CS (36)
      • 자료구조 (17)
      • Java (11)
      • C언어 (1)
      • 알고리즘 (6)
      • 어셈블리어 (0)
      • Python (1)
    • 이것저것 (0)
      • 회고 (0)
      • 책 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 라이브러리
  • 레드블랙트리
  • 재귀
  • 연결리스트
  • 모듈
  • 이진트리
  • 자바
  • 알고리즘
  • avl tree
  • C언어
  • 링크드리스트
  • 큐
  • 이중연결리스트
  • Queue
  • 상향식 분석
  • 재귀 분석
  • 유클리드 호제법
  • 하향식 분석
  • 인터페이스
  • 자료구조

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
1in
[Java] 상속 Inheritance - 3 (Type Conversion 형변환, Polymorphism 다형성)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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