>Java >java지도 시간 >Java가 인스턴스를 통한 정적 메소드 호출을 허용하는 이유는 무엇이며 이를 피해야 하는 이유는 무엇입니까?

Java가 인스턴스를 통한 정적 메소드 호출을 허용하는 이유는 무엇이며 이를 피해야 하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-09 05:01:11668검색

Why Does Java Allow Static Method Invocation Through Instances, and Why Should You Avoid It?

Java에서 인스턴스를 통한 정적 메서드 호출

Java에서는 인스턴스를 통해 정적 메서드를 호출하는 것이 가능하며, 이는 컴파일러를 발생시키는 동작입니다. 경고는 있지만 오류는 아닙니다.

왜 오류가 아닌가요? 오류?

Java 디자인 팀은 처음에 이 동작을 허용하여 실수를 범했습니다. 명시적으로 승인되지는 않았지만 호환성을 위해 유지되었습니다. 혼란스러운 코드로 이어질 수 있지만 본질적으로 잘못된 것은 아닙니다.

다형성의 환상

인스턴스를 통해 정적 메서드를 호출하는 것이 오해를 불러일으킬 수 있는 이유 중 하나는 다음과 같습니다. 다형성의 인상을 준다는 것입니다. 진정한 다형성에서는 호출되는 메서드가 개체 유형에 따라 달라집니다. 그러나 정적 메서드는 다형성이 아닙니다. 항상 선언된 클래스에 바인딩됩니다.

다음 예를 고려하세요.

Thread thread = new Thread();
int activeCount = thread.activeCount();

activeCount가 Thread 클래스의 정적 메서드이기 때문에 이 코드는 컴파일되지만 경고를 생성합니다. . 컴파일러는 호출에 사용해야 하는 Thread 클래스의 인스턴스를 결정할 수 없습니다. 이러한 유형의 코드는 혼란과 잠재적 오류를 초래할 수 있습니다.

대체 접근 방식

C#과 같은 언어에서는 인스턴스를 통해 정적 메서드를 호출하는 것이 허용되지 않습니다. 대신 올바른 접근 방식은 아래와 같이 클래스 이름을 사용하여 정적 메서드를 호출하는 것입니다.

public class Abc
{
    public void Test()
    {
        // Static methods in other classes are available via
        // the class name
        Foo.Bar();
    }
}

결론

정적 메서드를 호출하는 것은 기술적으로 허용되지만 Java의 인스턴스를 통해 잘못된 코드를 초래할 수 있는 나쁜 습관으로 간주됩니다. 개발자는 이 동작을 피하고 생성된 컴파일러 경고를 오류로 처리해야 합니다. 최신 IDE에서는 코드 명확성과 정확성을 보장하기 위해 이러한 호출을 오류로 처리하도록 컴파일러를 구성하는 것이 좋습니다.

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

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