1. 정적 메서드는 일반적인 프로시저 및 함수와 마찬가지로 호출되는 기본 메서드입니다. 컴파일러는 이러한 메서드의 주소를 알고 있으므로 정적 메서드가 호출되면 실행 정보를 실행 파일에 정적으로 연결할 수 있습니다. 이므로 정적 메서드가 가장 빠르지만 다형성을 지원하기 위해 재정의할 수는 없습니다.
2. 가상 메소드와 정적 메소드는 동일한 방식으로 호출됩니다. 가상 메서드는 재정의될 수 있으므로 컴파일러는 코드에서 호출될 때 지정된 가상 메서드의 주소를 알 수 없습니다. 따라서 컴파일러는 VMT(가상 메서드 테이블)를 작성하여 런타임에 함수 주소를 조회합니다. 모든 가상 메소드는 런타임 시 VMT를 통해 처리됩니다. 객체의 VMT 테이블에는 모든 가상 메소드가 있으므로 가상 메소드는 동적 메소드보다 더 많은 메모리를 사용하지만 상대적으로 빠르게 실행됩니다.
3. 동적 방법은 높이 시스템이 다르다는 점을 제외하면 기본적으로 가상 방법과 유사합니다. 컴파일러는 각 동적 메서드에 고유 번호를 할당하고 이 번호와 동적 메서드의 주소를 사용하여 DMT(동적 메서드 테이블)를 구성합니다. VMT 테이블과 달리 DMT 테이블에는 동적 메서드만 선언되어 있으며, 이 메서드는 다른 동적 메서드에 액세스하려면 조상 DMT 테이블이 필요합니다. 이로 인해 동적 메서드는 가상 메서드보다 메모리를 덜 사용하지만 개체의 DMT에서 동적 메서드를 검색해야 할 수 있으므로 실행 속도가 느립니다.
4. OP는 재정의를 사용하여 메서드가 다양한 파생 클래스에서 다양한 동작을 표시하도록 합니다. OP에서 재정의할 수 있는 메서드는 선언 시 가상 또는 동적으로 표시되는 메서드입니다. 메서드를 재정의하려면 파생 클래스 선언에서 virtual 또는dynamic 대신 override를 사용하세요. 재정의를 사용한 후 컴파일러는 VMT의 원래 메서드를 새 메서드로 대체하고 원래 메서드는 여전히 존재합니다. 재정의를 사용하여 정적 메서드를 다시 선언하면 이는 새 메서드에 완전히 포함되는 실제 재정의입니다. . 조상 클래스에서 동일한 메서드를 바꿉니다.