package p8;

public class App {
    public static void main(String[] args) {
        // 다형성 polymorphism
        // 특정 타입의 변수는 특정타입을 상속받는 모든 형태의 타입을 변수로 받을 수 있다.
        AAA a1 = new BBB(); // AAA타입이지만 BBB의 인스턴스 Upcasting
        a1.test();
        // a1.b1 = 10; // compile error 자손의 기능을 사용 못 함

        // instanceof opeartor
        if(a1 instanceof BBB) {
            BBB tempB = (BBB)a1; // 캐스팅 가능. 상속 관계일 경우에만 Downcasting
            tempB.test();
        }
    }
}

class AAA {
    int a1;
    int a2;

    void test() {
        System.out.println("AAA");
    }
}

class BBB extends AAA {
    int b1;
    int b2;

    void test() {
        System.out.println("BBB");
    }
}