JAVA/Java 기초

(오버로딩, 오버라이딩)참조 객체의 차이에 따른 정적, 동적 바인딩 !

john_ 2025. 12. 14. 04:25
728x90
class Animal {
    public void move() {
        System.out.println("Animal move");
    }

    public static void sleep() {
        System.out.println("Animal sleep");
    }
}

class Cat extends Animal {
    // 오버라이딩
    @Override
    public void move() {
        System.out.println("Cat move");
    }

    // 오버로딩
    public void move(int times) {
        System.out.println("Cat move " + times);
    }

    // static 메서드 숨김
    public static void sleep() {
        System.out.println("Cat sleep");
    }
}

 

이런 코드가 있다고 가정해 봤을때,

Animal a = new Cat();
a.move();        // Cat move
a.sleep();       // Animal sleep ❗

Cat c = new Cat();
c.move(3);       // Cat move 3
c.sleep();       // Cat sleep

 

이런 결과가 나오게 되는데 보면 static 메서드는 객체 기준이 아니라 참조기준 타입이라서 컴파일 타임에 이미 결정되기 때문이다.

 

실제 객체가 Cat 이어도 절대 cat 쪽의 static 메서드를 사용하지 않는것. cat쪽의 static은 사실상 하이딩 된다고 볼수있다.

 

왜냐면~!

 

static 메서드는 다형성 대상이 아님

오버라이딩처럼 “대체”되는 게 아니라

참조 타입에 따라 선택적으로 보일 뿐!!!

 


 

 

잊지말기~~~~

 

 

728x90