Подключение вызова метода к телу метода называется привязкой. Как сказал Маулик, «Static binding использует информацию типа (класс в Java) для привязки, тогда как динамическое связывание использует Object для разрешения привязки». Итак, этот код:
public class Animal {
void eat() {
System.out.println("animal is eating...");
}
}
class Dog extends Animal {
public static void main(String args[]) {
Animal a = new Dog();
a.eat(); // prints >> dog is eating...
}
@Override
void eat() {
System.out.println("dog is eating...");
}
}
Изменит результат: собака ест ... потому что использует ссылку на объект, чтобы найти, какой метод использовать. Если мы изменим приведенный выше код на это:
class Animal {
static void eat() {
System.out.println("animal is eating...");
}
}
class Dog extends Animal {
public static void main(String args[]) {
Animal a = new Dog();
a.eat(); // prints >> animal is eating...
}
static void eat() {
System.out.println("dog is eating...");
}
}
Это произведет: животное ест ... потому что это статический метод, поэтому он использует Type (в данном случае Animal), чтобы решить, статический метод для вызова. Помимо статических методов, частные и конечные методы используют один и тот же подход.