다형성

가언·2024년 7월 5일
post-thumbnail

✅ 다형성이란?

1. 하나의 타입에 여러 가지 객체를 담을 수 있다.
Phone phone=new Phone();
Phone phone=new Galaxy();
+phone은 iPhone도 담을 수 있다.

2. 하나의 객체를 여러 가지 타입에 담을 수 있다.
Phone phone=new Galaxy();
Galaxy phone=new Galaxy();
+인터페이스를 여러개 구현한다. ex) Implements A, B -> A에도 담길 수 있고, B에도 담길 수 있다!

둘 중에 무엇인가? 고민해본다면...

정답은 둘 다 다형성이라고 할 수 있지만, 어떻게 사용하느냐에 따라 어떤 특성에 가깝다고 말할 수 있다!

타입 변환

자바 세상의 타입 변환
1. 클래스 자동 타입 변환: 개발자가 직접 명시해주지 않아도 자동으로 타입 변환이 일어나는 것
- 자식 객체를 만들면서 바로 부모타입으로 변환할 때
- 만들어진 자식 객체를 부모타입으로 변환할 때
[유의 사항]
1. 오버라이딩한 메소드는 클래스 타입 변환을 하더라도 자식 메소드를 호출
2. 클래스 타입 변환을 한 클래스는 더이상 자식 클래스만의 멤버들을 호출 할 수 없다.

예시 코드)


  public static void main(String[] args) {
    Phone galaxy = new Galaxy();

    galaxy.galaxyBell(); //자식 클래스에만 존재하는 메소드 사용 불가
    galaxy.turnOn(); // 오버라이딩 한 메소드만 호출이 됨
  }
}
  1. 클래스 강제 타입 변환: 자식 객체가 부모 타입으로 (자동) 타입 변환을 한 후, 다시 자식 타입으로 변환하는 것
    개발자가 직접 명시해줘야만 강제 타입 변환이 가능하다.
    (자식이 부모로 바뀌고, 다시 자식으로 바뀔때에는 가능 접혀진 팔다리를 피는 것은 가능하다는 것!)

Instanceof

사용? 객체 instanceof 타입(클래스명)
: instanceof 기준 왼쪽 객체가 생성될 때 오른쪽 타입으로 생성되었는지 확인하는 연산자: 맞으면 True, 아니면 False를 반환

언제? 자식객체가 부모타입으로 바뀐 상황에서 자식객체임을 확인하고 싶을때 조건문으로 사용 가능하다.

profile
@gari_guri

0개의 댓글