자바(Java) 다형성(조상클래스,자손클래스)

2023. 2. 9. 18:58·JAVA-기초/JAVA기본
728x90
반응형
SMALL
다형성?

여러 가지 형태를 가질 수 있는 능력이란 뜻이며, 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 한다.
더 자세히 말하면, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것이다.



Keyboard와 NeonKeyboard는 서로 상속관계에 있으며 Keyboard는 조상 클래스, NeonKeyboard는 자손클래스이다.
참조 변수 k 에는 키보드 객체의 주소 값이 담겨 있으며, 참조 변수N에는 네온키보드의 값이 담겨있다.
이처럼 참조변수와 인스턴스의 타입이 일치하는 것이 보통이다.

이번엔 서로 상속관계에있는 두 클래스에서 조상 클래스의 타입의 참조변수로 자손클래스를 참조해보자.

 Keyboard(조상 클래스)참조변수 K에 NeonKeyboard(자손클래스)의 객체 주소값을 넣으면 어떻게 될까?

위 사진처럼 NeonKeyboard의 인스턴스를 동일하게 가지지만 NeonColor,Neon의 멤버변수가 조상클래스에는 없기 때문에 해당 빨간 x에 있는 메모리는 사용할 수 없게된다.

반대로 자손타입의 참조 변수에 조상객체의 주소를 집어넣으면 어떻게 될까?
위와 같이 에러가 뜬다. 이유가 뭘까?

인스턴스 Keyboard의 멤버 개수는 4개이고 참조변수 N의 멤버 개수는 6개다.
참조변수N이 사용할 수 있는 멤버 개수가 더 많다. 그래서 에러가 발생한다.

Keyboard에는 NeonSwitch()를 사용할  변수가 없기 때문에 문제가 발생한다.

참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다.
클래스는 상속을 통해서 확장은 될 수 있어도 축소는 할 수 없다. 조상 인스턴스의 멤버 개수는 자손 인스턴스의 멤버 개수보다 항상 적거나 같다.

모든 참조변수는 null 또는 4byte의 주소값이 저장되며, 참조변수의 타입은 참조할 수 있는 객체의 종류와 사용할 수 있는 멤버의 수를 결정한다.
조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수 없다.

 

728x90
반응형
SMALL

'JAVA-기초 > JAVA기본' 카테고리의 다른 글

객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙  (64) 2023.08.12
자바(Java) - 쓰레드란? start와 run의차이  (0) 2023.04.03
자바(Java) 참조변수의 형변환(업캐스팅/다운캐스팅)  (0) 2023.02.09
자바(Java) 인스턴스(객체), 객체 배열  (0) 2023.02.08
자바(Java) - 제어자 주의사항  (0) 2023.02.08
'JAVA-기초/JAVA기본' 카테고리의 다른 글
  • 자바(Java) - 쓰레드란? start와 run의차이
  • 자바(Java) 참조변수의 형변환(업캐스팅/다운캐스팅)
  • 자바(Java) 인스턴스(객체), 객체 배열
  • 자바(Java) - 제어자 주의사항
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (315)
      • 면접 준비 (36)
        • OS (6)
        • Spring Security (0)
        • Java (2)
        • DB (9)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      JSP
      Til
      CSS
      스프링프레임워크
      백준
      redis 채팅
      java
      JavaScript
      자바기초
      리눅스마스터2급
      자바 면접
      spring redis
      jsp request
      프로그래머스
      JS
      jsp기초
      자바스크립트
      자바 면접질문
      리눅스마스터2급정리
      레디스
      리눅스
      자바 반복문
      Spring
      자바
      Springframework
      Spring Data Redis
      자바 알고리즘
      HTML
      redis
      springsecurity
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    자바(Java) 다형성(조상클래스,자손클래스)
    상단으로

    티스토리툴바