У java есть привязка времени компиляции? - PullRequest
0 голосов
/ 11 августа 2010

сказано, что перегрузка имеет привязку времени компиляции в Java, но на самом деле объект создается во время выполнения, поэтому я не понимаю, как происходит привязка времени компиляции.

1 Ответ

2 голосов
/ 11 августа 2010

Это означает, что компилятор определяет, какую перегрузку использовать, основываясь исключительно на типе времени компиляции задействованных выражений. Пример кода:

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 соответственно) определяет, какие перегрузки рассматриваются.

Обратите внимание, что не совпадает с переопределением, основанным на типе целевого объекта время выполнения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...