Я очень запутался в привязке к теме. Как мы знаем, в статической привязке для определения привязки проверяется тип ссылки, а не объект, на который она ссылается, а при динамической привязке принимается во внимание тип объекта, на который указывает ссылка.
class A
{
void show()
{
System.out.println("From A");
}
}
class B extends A
{
void show()
{
System.out.println("From B");
}
}
class Main
{
public static void main(String[] quora)
{
A a1 = new A();
A a2 = new B();
a1.show(); //line 1
a2.show(); //line 2
}
}
В приведенном выше примере мы видим, что во время компиляции и Line1, и line2 будут обрабатываться статической привязкой, и они будут ссылаться на метод show A-класса (поскольку тип ссылки - A). Но во время выполнения вызов разрешается, и line1 ссылается на метод A-класса show (), а line2 ссылается на метод B-класса, то есть на тип объекта или, можно сказать, динамическое связывание.
Итак, мое главное намерение - узнать следующее.
Всегда ли динамическое связывание возникает после статического связывания? или я что то не так понимаю?
Если это правда, то правда ли, что каждый метод динамически связан во время выполнения?
Можем ли мы это обобщить?