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


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

  • 2016년 01월 14일에 작성됨

조회수 306


1 답변


좋아요
0
싫어요
채택취소하기

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()");
    }
}
  • 2016년 01월 14일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close