Объясните плиз или дайте ссылочку. Не могу разобраться как можно в список который принимает тип "StoryItem" запихнуть объект типа "grandmother". Как это вообще работает wolf.ate.add(grandmother);? То что класс grandmother наследует два списка от абстракт класса это понятно. Сама суть не понятно
public static Grandmother grandmother = new Grandmother();
    public static Wolf wolf = new Wolf();

    public static void main(String[] args) {
        // напишите тут ваш код
        wolf.ate.add(grandmother);
****************************************
***************************************
    }
    // Красная шапочка
    public static class LittleRedRidingHood extends StoryItem {
    }
    // Бабушка
    public static class Grandmother extends StoryItem {
    }
*************
*************
    // Волк
    public static class Wolf extends StoryItem {
    }
    public static abstract class StoryItem {
        public ArrayList<StoryItem> killed = new ArrayList<>();
        public ArrayList<StoryItem> ate = new ArrayList<>();
    }