Да.
Displaceable b
говорит, что можно сделать с b . Компилятор может (и делает) проверять, доступен ли этот метод для этого типа (Displaceable) во время компиляции.
Как это сделать не обязательно ясно во время компиляции. Это зависит от реализации, во время выполнения, просто сделать это (переместить).
Во время компиляции обещание (я могу двигаться!) Проверяется. Во время выполнения код должен доказать, что он действительно может:)
Даже если бы Displaceable
был классом , а не интерфейсом и реализовал сам move
, фактическая move
, называемая run-time, все равно была бы реализацией (если эта реализация, * 1021) *, переопределил бы реализацию Displaceable
).
Единственное время, когда существует привязка во время компиляции вызова (например, move
) к фактической реализации, - это когда метод определен как статический. Вот почему статические методы не могут быть определены в интерфейсах, так как они не содержат реализацию.