본문 바로가기
개발/Java

다형성

by BellOne4222 2024. 1. 29.

다형성


다형성이란?

  • 다형성
    • 상위클래스가 동일한 메시지로 하위 클래스를 서로 다르게 동작 시키는 객체지향 이론
    • Upcasting 사용
public class PolyTest {
    public static void main(String[] args) {

        // Upcasting으로 객체를 생성
        // 상속관계, 재정의(Override), 동적바인딩
        // [다형성(message polymorphism)]
        // 상위클래스가 동일한 메시지로 하위클래스를 서로다르게 동작시키는 객체지향 원리
        Animal ani = new Dog();
        ani.eat(); //실행시점에서 사용될(호출될)메서드가 결정되는 바인딩(동적바인딩)

        ani = new Cat();
        ani.eat();

        // Downcasting
        ((Cat)ani).night();
    }
}

다형성의 전제조건

  1. 상속관계
  2. Override(재정의)가 되어야 한다.
  3. Upcasting(업캐스팅)
  4. 동적 바인딩

다형성 활용(다형성 인수)

  • 하나의 타입으로 여러가지 타입을 받을 수 있다.(부모이기 때문에)
  • 부모 클래스 활용
  • instanceof로 타입 검사
public class PolyMethodTest {
    public static void main(String[] args) {
        Dog d = new Dog();
        display(d);

        Cat c = new Cat();
        display(c);

    }

    // 다형성 인수 Animal ani
    private static void display(Animal ani) {
        ani.eat();

        // Cat 타입으로 받은 경우에만 실행 -> if
        if(ani instanceof Cat){
            ((Cat)ani).night(); // Cat
        }

    }
}

다형성 활용(다형성 배열)

  • 배열은 동일한 자료형만 저장 가능하지만 부모타입의 배열은 자식타입을 저장 가능하다. (하나의 배열에 서로 다른 타입을 저장 가능)
  • 상위 타입 배열
public class PolyArrayTest {
    public static void main(String[] args) {
        Dog d=new Dog();
        Cat c=new Cat();

        // Dog, Cat 을 저장할 배열을 생성하시오.
        // Animal[] ani={new Dog(), new Cat()};
        // 다형성 배열
        Animal[] ani = new Animal[2];
        ani[0] = d;
        ani[1] = c;
        display(ani);
    }

    public static void display(Animal[] ani){ // 다형성 인수
        for (int i = 0; i < ani.length; i++) {
            ani[i].eat();
            if(ani[i] instanceof Cat){ // Cat 타입 일때만 night 실행
                ((Cat)ani[i]).night();
            }
        }
    }
}

'개발 > Java' 카테고리의 다른 글

자바 최상위 클래스 Object  (0) 2024.01.29
추상클래스와 인터페이스  (0) 2024.01.29
객체 형변환  (0) 2024.01.28
상속  (1) 2024.01.28
객체 생성과 static 과의 관계  (0) 2024.01.28