Java의 정적 메서드 상속
Java의 상속에 대한 문서에서는 멤버가 접근성에 따라 상속된다고 설명합니다. 하지만 정적 메서드의 경우에는 불일치가 있는 것 같습니다.
문서에 따르면 정적 메서드는 상속되지 않습니다. 그러나 다음 코드는 하위 클래스에서 정적 메서드에 액세스할 수 있음을 보여줍니다.
class A { public static void display() { System.out.println("Inside static method of superclass"); } } class B extends A { public void show() { // This works - accessing display() by its simple name - // meaning it is inherited according to the book. display(); } }
이것이 어떻게 가능합니까?
답은 Java의 기본 상속 구현에 있습니다. 액세스 가능한 모든 메서드는 유형(정적 또는 인스턴스)에 관계없이 하위 클래스에서 상속됩니다. 그러나 정적 메서드 상속과 인스턴스 메서드 상속에는 미묘한 차이가 있습니다.
동일한 시그니처를 가진 새 정적 메서드가 하위 클래스에 정의되면 이전 정적 메서드가 재정의되지 않고 숨겨집니다. 즉, 하위 클래스에서 호출할 때 새 정적 메서드가 우선적으로 적용됩니다. 그러나 원래 정적 메서드는 여전히 슈퍼클래스 이름을 사용하여 액세스할 수 있습니다.
반대로, 인스턴스 메서드가 하위 클래스에서 재정의되면 새 인스턴스 메서드가 이전 인스턴스 메서드를 완전히 대체합니다. 이것이 상속된 인스턴스 메소드가 서브클래스에서 간단한 이름으로 액세스할 수 없는 이유입니다.
따라서 정적 메소드가 Java 문서에서 상속된 것으로 명시적으로 언급되지는 않았지만 액세스 가능한 다른 모든 멤버와 함께 암시적으로 상속됩니다. 정적 메서드 상속의 유일한 차이점은 하위 클래스에서 동일한 시그니처를 사용하는 정적 메서드에 의해 숨겨질 수 있다는 것입니다.
위 내용은 정적 메소드는 Java에서 상속됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!