Добрый день, объясните пож как работает этот метод? Не понимаю. ок, мы создали локальный класс, который имплементит интерфейс Sayable, так как Cat его не имплементирует. Ок фишка в том что мы можем использовать переменные Cat name . Но я вот не понимаю мы создаем объект в котором в зависимости от i будет либо
if (i < 1) return name + " спит.";
либо:
else {
                    StringBuilder str = new StringBuilder();
                    for (int j = 0; j < i; j++) {
                        str.append("я");
                    }
                    return name + " говорит м" + str + "у!";
Потом мы добавляем этот объект в список и в списке вызываем этот метод Say :
for (int i = 0; i < pets.size(); i++) {
            System.out.println(pets.get(i).say());
        }
Так вот я может туплю но не могу никак понять как он у объекта определяет какую строку вернуть если i то я здесь не передаю?????
public Sayable toSayable(final int i) {
        class CatPet implements Sayable {

            @Override
            public String say() {
                if (i < 1) return name + " спит.";
                else {
                    StringBuilder str = new StringBuilder();
                    for (int j = 0; j < i; j++) {
                        str.append("я");
                    }
                    return name + " говорит м" + str + "у!";
                }
            }
        }
        CatPet catPet = new CatPet();
        return catPet;
    }