Это означает, что компилятор определяет, какую перегрузку использовать, основываясь исключительно на типе времени компиляции задействованных выражений. Пример кода:
class Parent
{
void foo(Object x)
{
System.out.println("Parent.foo(Object)");
}
}
class Child extends Parent
{
void foo(String x)
{
System.out.println("Child.foo(String)");
}
}
public class Test
{
public static void main(String[] args)
{
Child c = new Child();
c.foo("hello"); // Calls Child.foo(String)
Parent p = c;
p.foo("hello"); // Calls Parent.foo(Object)
}
}
Обратите внимание, как объявленный тип переменной (Parent
или Child
для p
и c
соответственно) определяет, какие перегрузки рассматриваются.
Обратите внимание, что не совпадает с переопределением, основанным на типе целевого объекта время выполнения .