보통 해당 객체의 클래스가 of 이후의 클래스가 맞는가? 를 판단할 때 쓰는 걸로 알고 있는데, 특이한 점이 있어서 적어놓는다!

아래 두개의 코드의 차이점이 보이는가?!

        private static void action(Object obj) {
        if (obj instanceof Dog) {
            ((Dog)dog).sound();
        } else if (obj instanceof Car car) {
            ((Car)car).move();
        }
    }
    
    
    private static void action(Object obj) {
        if (obj instanceof Dog dog) {
            dog.sound();
        } else if (obj instanceof Car car) {
            car.move();
        }
    }

그렇다 instanceof 후에 선언까지 하면 다운캐스팅을 실제 함수 호출에서 할 필요 없다! → 다운캐스팅까지 해준다!

이처럼 Object는 모든 객체를 담을 수 있지만, 모든 매서드를 갖고 있는 것은 아니다!

→ 그 객체의 매서드를 쓰려면 다운 캐스팅을 해야한다!

→ ToString()과 같은 매서드는 Object에도 있으므로 자식에서 오버라이딩 하면 된다!