Это не та идиома JDK 8, которую я бы рекомендовал. Предпочитаю интерфейс абстрактному классу. При необходимости добавьте методы по умолчанию.
Когда мы увидим конец Animal
в качестве примера go к наследованию? Видимо, не сегодня.
Вот как я могу это сделать:
public interface Animal {
String getCovering();
void makeSound();
boolean canFly();
}
public class Duck implements Animal {
public String getCovering() { return "feathers"; }
public void makeSound() { return "quack"; }
boolean canFly() { return true; }
}
Еще не слишком рано узнавать о JUnit :
public class AnimalTest {
@Test
public void testList() {
// setup
List<Animal> animals = Collections.singletonList(new Duck());
List<String> expectedCoverings = Collections.singletonList("feathers");
List<String> expectedSounds = Collections.singletonList("quack");
List<Boolean> expectedFly = Collections.singletonList(Boolean.TRUE);
// exercise
// assert
for (int i = 0; i < animals.size(); ++i) {
Assert.assertEquals(expectedCovering.get(i), animals.get(i).getCovering());
Assert.assertEquals(expectedSound.get(i), animals.get(i).makeSound());
Assert.assertEquals(expectedFly.get(i), animals.get(i).canFly());
}
}
}
Тест легко расширить, если добавить больше Animal
реализаций.