>Java >java지도 시간 >Java가 인스턴스를 통한 정적 메소드 호출을 오류로 처리하지 않는 이유는 무엇입니까?

Java가 인스턴스를 통한 정적 메소드 호출을 오류로 처리하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-10 22:13:11930검색

Why Doesn't Java Treat Calling Static Methods Through Instances as an Error?

인스턴스를 통한 정적 메서드 호출의 흥미로운 사례

Java의 독특한 동작에 대한 지식이 널리 퍼져 있음에도 불구하고 문제는 여전히 남아 있습니다. 인스턴스를 통한 정적 메소드가 컴파일러에서 오류로 간주되지 않습니까?

컴파일러 디자인 사고

Java 디자이너는 실수로 이 예외를 언어 디자인에 도입했습니다. 문제를 수정하려고 시도하면 호환성 문제가 발생하여 지속적인 결함으로 남게 됩니다.

오해의 소지가 있는 코드

동작이 기술적으로 올바르지는 않지만 매우 오해의 소지가 있습니다. 암호. 도트 연산자를 사용하여 메서드를 호출하면 인스턴스 값이 사용된다는 의미입니다. 메서드가 정적이면 이러한 기대가 위반됩니다.

일관되지 않은 처리

Java의 정적 메서드 호출 처리가 일관되지 않습니다. 초기화되지 않은 인스턴스 변수를 통해 정적 메서드를 호출하는 것을 허용하지 않지만, 실행 시간 값이 관련이 없더라도 초기화된 인스턴스에 대한 권한을 부여합니다.

상속 고려 사항

클레임과 달리 상속은 정적 메서드에 적용되지 않습니다. 다음 코드에서 볼 수 있듯이 다형성이 아닙니다.

class Base {
    static void foo() { System.out.println("Base.foo()"); }
}

class Derived extends Base {
    static void foo() { System.out.println("Derived.foo()"); }
}

public class Test {
    public static void main(String[] args) {
        Base b = new Derived();
        b.foo(); // Prints "Base.foo()"
    }
}

정적 메서드 호출은 인스턴스의 런타임 값에 영향을 받지 않고 그대로 유지되어 다형성이 부족함을 드러내며 이러한 호출의 오해의 소지가 있는 특성을 더욱 강조합니다.

위 내용은 Java가 인스턴스를 통한 정적 메소드 호출을 오류로 처리하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.