[Java] 객체지향 (7) 다형성

lkc9898·2022년 5월 23일

Java

목록 보기
17/25
post-thumbnail

다형성이란

다형성이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.
자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다.

참조변수의 다형성

class Parent { ... }
class Child extends Parent { ... }

Parent pa = new Parent(); // 가능
Child ch = new Child(); // 가능
Parent pc = new Child(); // 가능
Child cp = new Parent(); // 오류 발생

참조변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 같거나 적어야 참조할 수 있다.

참조변수의 타입 변환

자바에서는 참조 변수도 다음과 같은 조건에 따라 타입 변환을 할 수 있다.

  • 서로 상속 관계에 있는 클래스 사이에만 타입 변환을 할 수 있다.

  • 자식 클래스 타입에서 부모 클래스 타입으로의 타입 변환은 생략할 수 있다

  • 부모 클래스 타입에서 자식 클래스 타입으로의 타입 변환은 반드시 명시해야 한다.

(변환할타입의클래스이름) 변환할참조변수

instanceof 연산자

instanceof 연산자를 이용해 참조변수가 참조하고 있는 인스턴스의 실제 타입을 확인할 수 있다.

참조변수 instanceof 타입

참조변수가 실제로 참조하고 있는 인스턴스 타입이 클래스 타입이면 true를 반환하고, 아니면 false를 반환한다. 만약 참조변수가 null을 가리키고 있으면 false를 반환한다.

코드 예시

class Parent {}
class Child extends Parent {}
class Brother extends Parent {}

public class PolymorphismEx {
	public static void main(String[] args) {
    	Parent p = new Parent();
        System.out.println(p instanceof Object);
        System.out.println(p instanceof Parent);
        System.out.println(p instanceof Child);
        System.out.println();
        
        Parent c = new Child();
        System.out.println(c instanceof Object);
        System.out.println(c instanceof Parent);
        System.out.println(c instanceof Child);
    }
}
/* 실행 결과
true
true
false

true
true
true
*/

0개의 댓글