왜 자바에서 static메소드의 오버라이딩을 허용하지 않는걸까요?

조회수 7102회

왜 자바에서는 static 메소드의 오버라이딩이 안되는거죠? 가능하다면 어떻게 하는지 예제 좀 보여주세요.

1 답변

  • 좋아요

    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()");
        }
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)