TIL) Java - 다형성

oatraspberry·2022년 12월 13일
post-thumbnail

다형성(polymorphism)

하나의 객체가 여러 가지 타입을 가질 수 있는 것.
조상 타입 참조 변수로 자손 타입 객체를 다루는 것

SmartTv s = new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치
Tv t = new SmartTv(); // 타입 불일치, 조상 타입 참조변수로 자손 타입 인스턴스 참조

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

Tv t = new SmartTv(); // OK. 허용
SmartTv s = new Tv(); // 에러. 허용 안 됨.

자동 타입 변환

  • 프로그램 실행 도중 자동으로 타입 변환 일어나는 것
Cat cat = new Cat();
Animal animal = cat;
  • 바로 위 부모가 아니더라도 상속 계층에서 상위 타입인 경우 자동 타입 변환 일어날 수 있음.
  • 부모 타입으로 자동 타입 변환 이후에는 부모 클래스에 선언된 필드 및 메소드만 접근 가능
  • 예외적으로, 메소드가 자식 클래스에서 재정의될 경우 자식 클래스의 메소드가 대신 호출
  • 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.

필드의 다형성

  • 필드 타입을 부모 타입으로 선언할 경우 다양한 자식 객체가 저장되어 필드 사용 결과가 달라질 수 있음.

  • 매개변수의 다형성

    • 매개 변수를 부모 타입으로 선언하는 효과
      메소드 호출 시 매개값으로 부모 객체 및 모든 자식 객체를 제공할 수 있음.
      자식의 재정의된 메소드가 호출->다형성
  • 강제 타입 변환(casting)

    • 부모 타입을 자식 타입으로 변환
      조건: 자식 타입이 부모 타입으로 자동 타입 변환한 후 다시 반대로 변환할 때 사용
  • instanceof 연산자

    • 어떤 객체가 어느 클래스의 인스턴스인지 확인
    • 메소드 내 강제 타입 변환 필요한 경우
      • 타입 확인하지 않고 강제 타입 변환 시도 시 ClassCastException 발생할 수 있음.
      • instaceof 연산자 통해 확인 후 안전하게 실행
        boolean result = 좌항(객체) instanceof 우항(타입)
profile
개발자가 될테야

0개의 댓글