Я задался вопросом, как можно заметить при использовании переменной name, я не пользовался ее вызовом как Cat.this поясните пожалуйста, зачем в данном примере ее так вызывать, если она доступна и без этого или может что может поменяться
public Sayable toSayable(final int i) {
        class CatPet implements Sayable{

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