Собственно код задачи:
public class Solution {
public static LittleRedRidingHood hood = new LittleRedRidingHood();
public static Grandmother grandmother = new Grandmother();
public static Patty patty = new Patty();
public static Woodman woodman = new Woodman();
public static Wolf wolf = new Wolf();
public static void main(String[] args) {
}
//красная шапочка
public static class LittleRedRidingHood extends StoryItem {
}
//бабушка
public static class Grandmother extends StoryItem {
}
//пирожек
public static class Patty extends StoryItem {
}
//дровосек
public static class Woodman extends StoryItem {
}
//волк
public static class Wolf extends StoryItem {
}
public static abstract class StoryItem {
public ArrayList<StoryItem> killed = new ArrayList<StoryItem>();
public ArrayList<StoryItem> ate = new ArrayList<StoryItem>();
}
}
Возникает ряд вопросов:
1. Почему дженерики killed и ate могут в себе хранить объекты других классов?
public ArrayList<StoryItem> killed = new ArrayList<StoryItem>();
public ArrayList<StoryItem> ate = new ArrayList<StoryItem>();
Ведь судя по коду, хранить в них можно объекты только класса StoryItem, но в действительно хранить там можно все объекты других созданных классов. По какой причине это происходит?
2. Почему при изменении доступа у обоих дженериков с public на private, уже не получится что-то в них добавить, обращаясь к ним через статичные переменные (да и не через статичные тоже) наших персонажей, НО при этом, если у классов наших персонажей прописать эти джененрики с тем же приватным доступом, то проблем не возникает?
Выходит extends (расширение) не возымеет эффекта (к ним невозможно будет обратиться), если поля класса имеют приватный доступ?