본문 바로가기
카테고리 없음

JAVA - 객체 지향 심화 4) 다형성

by 삐약 개발자 2024. 11. 27.

하나의 객체가 여러 가지 형태를 가질 수 있는 성질을 의미

상위 클래스 타입의 참조 변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것

 

// 참조 변수의 다형성 예시

class Friend {
    public void friendInfo() {
        System.out.println("나는 당신의 친구입니다.");
    }
}

class BoyFriend extends Friend {
   
    public void friendInfo() {
        System.out.println("나는 당신의 남자친구입니다.");
    }
}

class GirlFriend extends Friend {
    
    public void friendInfo() {
        System.out.println("나는 당신의 여자친구입니다.");
    }
}

public class FriendTest {
    public static void main(String[] args) {
        Friend friend = new Friend(); // 객체 타입과 참조 변수 타입의 일치
        BoyFriend boyfriend = new BoyFriend();
        Friend girlfriend = new GirlFriend(); // 객체 타입과 참조 변수 타입의 불일치

        friend.friendInfo();
        boyfriend.friendInfo();
        girlfriend.friendInfo();
    }
}

 

참조 변수의 타입 변환

 

타입 변환을 위해서는 다음의 세 가지 조건을 충족해야 함

  1. 서로 상속 관계에 있는 상위 클래스 - 하위 클래스 사이에만 타입 변환이 가능
  2. 하위 클래스 타입에서 상위 클래스 타입으로의 타입 변환(업캐스팅)은 형 변환 연산자(괄호)를 생략할 수 있음
  3. 반대로 상위 클래스에서 하위 클래스 타입으로 변환(다운캐스팅)은 형 변환 연산자(괄호)를 반드시 명시해야 함
    • 또한, 다운 캐스팅은 업 캐스팅이 되어 있는 참조 변수에 한해서만 가능

 

instanceof 연산자

캐스팅이 가능한지 여부를 boolean 타입으로 확인할수 있는 자바의 문법 요소

 

다형성의 활용 예제 해보기