ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 다형성(polymorphism)
    프로그래밍/JAVA 2022. 8. 7. 13:43
    728x90

     

     

    다형성은 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다. 

     

     

    참조 변수의 다형성

    부모클래스 타입의 참조 변수로 자식클래스 타입의 인스턴스를 참조할 수 있다.

    class Parent { ... }
    class Child extends Parent { ... }
    ...
    Parent parent = new Child();

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

    class Parent { ... }
    class Child extends Parent { ... }
    ...
    Child child = new Parent();

    위와 같이 쉽게 얘기하자면 자식클래스 타입의 참조 변수로 부모클래스 타입의 인스턴스를 참조할 없다는 것을 의미한다.

    참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 많기 때문이다.

     

     

    참조 변수의 타입변환

    1. 서로 상속 관계에 있는 클래스 사이에만 타입 변환이 가능하다.

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

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

     

    class Parent { ... }
    class Child extends Parent { ... }
    ...
    
    // case01
    Parent parent = null;
    Child child = new Child();
    
    parent = child;          // 자식타입에서 부모타입으로 변환, 생략가능
    
    
    // case02
    Child child = null;
    Parent parent = new Parent();
    
    child = (Child)parent; // 부모타입에서 자식타입으로 변환, 생략불가

     


     

    instanceof 연산자

    참조변수가 참조하고 있는 인스턴스(객체)의 실제 타입을 알아보기 위해 사용하는 연산자이다. instanceof 왼쪽에는 참조변수를, 오른쪽에는 타입(클래스 명)이 피연산자로 위치시킨다.

    참조변수 instanceof 클래스이름

    연산의 결과는 boolean값으로 반환하며 true일 경우 형변환이 가능하다

    class Parent { }
    class Child extends Parent { }
    
    public class Polymorphism {
        public static void main(String[] args) {
            Parent parent01 = new Parent();
            System.out.println(parent01 instanceof Parent); // true
            System.out.println(parent01 instanceof Child);  // false
    
            Parent parent02 = new Child();
            System.out.println(parent02 instanceof Parent); // true
            System.out.println(parent02 instanceof Child);  // true
        }
    }

     

    [참조] : http://tcpschool.com/java/java_polymorphism_concept

     

     

     

     

     

    728x90

    '프로그래밍 > JAVA' 카테고리의 다른 글

    [Java] 추상 클래스(abstract class)  (0) 2022.08.08
    [Java] Wrapper class  (0) 2022.08.08
    [Java] 메소드 오버라이딩(method overriding)  (0) 2022.08.07
    [Java] 상속(inheritance)  (0) 2022.08.07
    [Java] Object 클래스  (0) 2022.08.07

    댓글

Designed by Tistory.