Я прочитал много статей о разнице между статическим c связыванием и динамическим c связыванием в Java, но ни одна из них на самом деле не говорит о том, зачем нам нужно динамическое c связывание. Почему какой-то код должен быть связан только во время выполнения? Почему нельзя связать весь код во время компиляции?
Я понимаю концепции переопределения методов и полиморфизма, но я не понимаю, почему компилятор (во время компиляции) не сможет заметить, что объект относится к подклассу и должен просто использовать этот метод.