Не могу понять для чего используется Swimmable getCurrentAnimal(). Насколько понимаю, классы Orca и Whale в случае наследования от OceanAnimal уже содержат метод swim и имплементировать отдельно интерфейс Swimmable не нужно, но как сделать так чтобы классы Orca и Whale правильно реализовали метод swim?
И ещё вопрос по поводу конструкции OceanAnimal currentAnimal = (OceanAnimal) getCurrentAnimal(), что она делает?
package com.javarush.task.task14.task1416;
/*
Исправление ошибок
*/
public class Solution {
public static void main(String[] args) {
Swimmable animal = new Orca();
animal.swim();
animal = new Whale();
animal.swim();
animal = new Otter();
animal.swim();
}
public static void test(Swimmable animal) {
animal.swim();
}
interface Walkable {
void walk();
}
interface Swimmable {
void swim();
}
static abstract class OceanAnimal {
public void swim() {
OceanAnimal currentAnimal = (OceanAnimal) getCurrentAnimal();
currentAnimal.displaySwim();
}
private void displaySwim() {
System.out.println(getCurrentAnimal().getClass().getSimpleName() + " is swimming");
}
abstract Swimmable getCurrentAnimal();
}
static class Orca extends OceanAnimal {
Swimmable getCurrentAnimal() {
return new Orca;
}
}
static class Whale extends OceanAnimal {
public void swim() {}
}
static class Otter implements Walkable, Swimmable {
public void walk() {}
public void swim() {}
}
}