Ну, это из-за статической привязки.
1) Статическая привязка в Java происходит во время компиляции, тогда как динамическое связывание происходит во время выполнения.
2) частные методы , конечные методы и статические методы и переменные используют статическое связывание и связаны с компилятором, в то время как виртуальные методы связаны во время выполнения на основе объекта времени выполнения.
3) Статическое связывание использует информацию типа (класс в Java) для привязки во время динамического привязка использует Object для разрешения привязки.
4) Перегруженные методы связаны с использованием статической привязки, тогда как переопределенные методы связаны с использованием динамического связывания во время выполнения.
blockquote>
Это довольно просто.