У меня есть симуляция, в которой у меня есть базовый класс с именем Animal
и классы, производные от него, такие как Fox
и Hare
. Мне нужно собрать много информации о популяции животных, в том числе: count
, maleCount
, adultCount
и многое другое. Чтобы сохранить его в чистоте, я создал статический вложенный класс:
public class Animal {
protected static class Stats {
public static int count;
public static int maleCount;
// and many more...
}
private static Stats stats = new Stats();
public static Stats getStats() {
return stats;
}
protected void foo() { //protected method using Stats
if (getStats.maleCount > 2)
bar();
}
}
public class Fox extends Animal { //Hare created similarly
private static Stats stats = new Stats();
public static Stats getStats() {
return stats;
}
}
Функция foo
использует Stats
, и она должна использовать версию из соответствующего унаследованного класса (поэтому, если мы вызываем foo()
в Fox
, она должна использовать Stats
из Fox
).
Основная проблема сейчас заключается в том, что вызов
Fox.getStats().count
из другого класса (например, Main
) приводит к ошибке:
Error:(61, 42) java: main.Animal.Stats.count is defined in an inaccessible class or interface
Что такое решение проблемы? Является ли этот подход вложенного класса с геттером даже правильным?