Without understanding the C++ spec, you cannot understand what “virtualâ€
means.
That is very arrogant of you. Especially since the JLS only uses the
word "virtual" (outside of the phrase "virtual machine") in §15:
The invocation mode, computed as follows:
If the compile-time declaration has the static modifier, then the
invocation mode is static.
Otherwise, if the compile-time declaration has the private
modifier, then the invocation mode is nonvirtual.
Otherwise, if the part of the method invocation before the left
parenthesis is of the form super . Identifier or of the form
ClassName.super.Identifier then the invocation mode is super.
Otherwise, if the compile-time declaration is in an interface, then
the invocation mode is interface.
Otherwise, the invocation mode is virtual.
[ ... ]
If class S contains a declaration for a non-abstract method named m with
the same descriptor (same number of parameters, the same parameter
types, and the same return type) required by the method invocation as
determined at compile time (§15.12.3), then:
If the invocation mode is super or interface, then this is the
method to be invoked, and the procedure terminates.
If the invocation mode is virtual, and the declaration in S
overrides (§8.4.8.1) X.m, then the method declared in S is the method to
be invoked, and the procedure terminates.
I might add that, in the JLS usage, private methods cannot be virtual
since any method with a private modifier is either static or nonvirtual.