Есть код:
public class Solution {
public static void main(String[] args) {
Swimmable animal = new Orca();
animal.swim();
Вызываем метод swim() на переменной animal, которая ссылается на созданный объект класса Orca.
Далее метод swim():
public void swim() {
OceanAnimal currentAnimal = (OceanAnimal) getCurrentAnimal();
currentAnimal.swimming();
Не понятно как программа понимает, что нужно вызвать метод getCurrentAnimal класса Orca, а не, например, Whale. Из-за того, что swim вызывается на объекте Orca? Даже если так, то мне все равно не понятна логика.