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
'JAVA > Java 기초' 카테고리의 다른 글
| [학습단 후기] "코딩 자율학습 자바 입문" - 내용을 다시 한번 확인해보자 (0) | 2025.12.16 |
|---|---|
| 4주차 JAVA 학습 인증 (추상클래스) (0) | 2025.12.16 |
| 3주차 JAVA 학습 인증 (오버로딩) (0) | 2025.12.09 |
| 2주차 JAVA 학습 인증 (2차원 배열을 이용한 합계와 평균 구하기) (0) | 2025.12.02 |
| 1주차 JAVA 학습 인증 (논리연산자 사용하지 않는 else if문) (0) | 2025.11.24 |