Как управлять вложенным классом через множественное наследование в Java - PullRequest
0 голосов
/ 02 июня 2019

У меня есть симуляция, в которой у меня есть базовый класс с именем 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

Что такое решение проблемы? Является ли этот подход вложенного класса с геттером даже правильным?

1 Ответ

1 голос
/ 02 июня 2019

Если вы хотите получить доступ к Stats из другого класса, он должен быть общедоступным.

Модификатор защищенного доступа ограничит доступ к классам, отличным от классов в том же пакете и его подклассах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...