Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

다형성(polymorphism) 본문

Java/객체지향

다형성(polymorphism)

빌드이너프 2023. 6. 12. 00:22

다형성

여러가지 형태를 가질 수 있는 능력

조상 타입 참조 변수로 자손 타입 객체를 다루는 것

 

 

코드 예시

class Tv {
    boolean power;
    int channel;
    
    void power() { power = !power; }
    void channelUp() { ++channel; }
    void channelDown() { --channel; }
}

class SmartTv extends Tv {
    String text; // null 값
    void caption() { /* 내용 생략 */ }
}

 

Tv는 Tv(), SmartTv는 SmartTv()로 타입이 일치해야한다

Tv t = new Tv();
SmartTv s = new SmartTv();

 

다형성이라는 것은 타입이 불일치하더라도 된다

(Tv와 SmartTv()는 타입이 불일치하다)

Tv t = new SmartTv(); // 타입 불일치

객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이

참조변수 타입과 인스턴스 타입이 일치하는 경우

SmartTv s = new SmartTv(); // 참조 변수 s와 인스턴스의 타입이 일치

7개의 멤버 모두 사용 가능

참조변수 타입과 인스턴스 타입이 불일치하는 경우

Tv t = new SmartTv(); // 조상 타입 참조변수 t로 자손 타입 인스턴스 참조

 

7개의 멤버가 있지만 5개의 멤버만 사용할 수 있다


자손 타입의 참조 변소로 조상 타입의 객체를 가리킬 수 없다

Tv t = new SmartTv(); // OK

실제 가지고 있는 멤버 개수보다 사용할 수 있는 멤버가 많은 같거나 적은 경우 사용가능

7개의 멤버가 있지만 [Tv가 사용할 수 있는 멤버는 5개]이다 => 사용 가능

SmartTv s = new Tv(); // 에러

실제 가지고 있는 멤버 개수보다 사용할 수 있는 멤버가 많은 경우 에러

[SmartTv는 사용할 수 있는 멤버는 7개]지만 5개만 사용할 수 있기 때문에 에러 발생

(없는데 호출하기 때문에 에러 발생)


1. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하는가?

아니다, 일치하는 것이 보통이지만 일치하지 않을 수도 있다

(다형성)

 

2. 참조변수가 조상 타입일 때와 자손 타입일 때의 차이?

참조변수로 사용할 수 있는 멤버의 개수가 달라진다

 

3. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있는가?

안된다


다형성이 장점이라고 하는데

참조변수와 인스턴스 타입이 일치하지 않을경우 사용할 수 있는 멤버 개수가 같거나 적어진다

이때 적어지는 경우 왜 장점인지 모르겠다

 

=> 밑 링크 참조

 

매개변수의 다형성(다형성 장점 1)

 

하나의 배열로 여러 종류 객체 다루기(다형성 장점 2)

'Java > 객체지향' 카테고리의 다른 글

instanceof 연산자  (0) 2023.06.12
참조변수의 형변환  (0) 2023.06.12
캡슐화  (0) 2023.06.09
접근 제어자(access modifier)  (0) 2023.06.09
제어자(modifier)  (0) 2023.06.08