The Java Virtual machine provides 5 call bytecode instructions, respectively
Invokestatic: Calling a static method
Invokespecial: Invokes instance constructors <init> methods, private methods, and parent class methods.
Invokevirtual: Call virtual method.
Invokeinterfacel invokes an interface method, which at run time determines an object that implements this interface.
Invokedynamic: The method referenced by the call-point qualifier is parsed dynamically at run time before executing the method, where the dispatch logic is cured inside the Java Virtual machine in the previous four calling instructions. The dispatch logic of the invokedynamic instruction is determined by the user-defined guidance method.
As long as the method called by the invokestatic and invokespecial directives can determine a unique invocation version in the parsing phase, there are static methods that meet this condition, private methods, instance constructors, The parent class method has four classes. They parse the symbolic reference as a direct reference to the method when the class loads. These methods can be called non-virtual methods. In contrast, other methods are called virtual methods (except the final method.
Above from << in-depth understanding of Java virtual Machines >>
Method Invocation and Dispatch