왜 자바에서 static메소드의 오버라이딩을 허용하지 않는걸까요?
조회수 7049회
1 답변
-
JVM 이 메서드를 호출할 때, instance method 의 경우 런타임 시 해당 메서드를 구현하고 있는 실제 객체를 찾아 호출합니다. (다형성) 하지만 컴파일러와 JVM 모두 static 메서드에 대해서는 실제 객체를 찾는 작업을 시행하지 않기 때문에 class method(static method)의 경우, 컴파일 시점에 선언된 타입의 메서드를 호출합니다. 그래서 static 메소드에서는 다형성이 적용되지 않습니다.
또 원칙적으로 오버라이딩은 안되지만 아래 코드처럼은 가능합니다. 자바언어에서 이같은 경우를 하이딩(hiding)이라고 하는데요. 하이딩은 이론적으로만 존재할뿐 실제 클래스 설계시에는 추천할만한 기술은 아닙니다.
public class A{ public static void test() { System.out.println("A test()"); } } class B extends A{ @Override // 컴파일 오류 public static void test() { System.out.println("A test()"); } } //----------------------------------------------------------------- public class A{ public static void test() { System.out.println("A test()"); } } class B extends A{ public static void test() { System.out.println("A test()"); } }
댓글 입력