IT 개발노트

다형성 본문

기초튼튼/JAVA

다형성

limsungju 2019. 7. 2. 10:26

1. 다형성(polymorphism)
1.1 다형성이란?
- 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것.
-> 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성.

- 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만, 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.

1.2 참조변수의 형변환
- 서로 상속관계에 있는 타입간의 형변환만 가능하다.
- 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능
자손타입 -> 조상타입(Up-casting) : 형변환 생략가능
자손타입 <- 조상타입(Down-casting) : 형변환 생략불가

class Car {
    String color;
    int door;
    
    void drive() { // 운전하는 기능
        System.out.println("drive, Brrrr-");
    }
    
    void stop() { // 멈추는 기능
        System.out.println("stop!!!");
    }
}

class FireEngine extends Car { // 소방차
    void water() { // 물뿌리는 기능
        System.out.println("water!!!");
    }
}

class Ambulance extends Car { // 구급차
    void siren() { // 사이렌이 울리는 기능
        System.out.println("siren~~~");
    }
}

public static void main(String args[]) {
    Car car = null;
    FireEngine fe = new FireEngine();
    FireEngine fe2 = null;
    
    fe.water();
    car = fe; // car = (Car)fe; 조상 <- 자손
    // car.water(); // 사용불가능
    fe2 = (FireEngine)car; // 자손 <- 조상
    fe2.water();
}

1.3 instanceof연산자
- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용.
- 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false.
- instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다.

1.4 참조변수와 인스턴스변수의 연결
- 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버변수가 달라진다. (참조변수에 영향받음)
- 메서드가 중복정의된 경우, 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 메서드가 호출된다.(참조변수타입에 영향받지 않음)

1.5 매개변수의 다형성
- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.

-> buy(Tv t)로 구현하면 Computer, Audio ... 등등 새로운 상품이 추가 될 때마다 메서드를 추가해주어야 하지만, buy(Product p)로 구현하면 Product는 모든 상품들의 조상이기 때문에 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있기 때문에 새로운 상품이 추가되더라도 메서드를 추가하지 않고 사용할 수 있다.

1.6 여러 종류의 객체를 하나의 배열로 다루기
- 조상타입의 배열에 자손들의 객체를 담을 수 있다.

'기초튼튼 > JAVA' 카테고리의 다른 글

인터페이스  (0) 2019.07.04
추상클래스  (0) 2019.07.03
제어자  (0) 2019.07.01
package와 import  (0) 2019.06.09
오버라이딩  (0) 2019.06.07