Кто-нибудь может пример кода показать по первому пункту 1. В классе Cat добавь public статическую переменную cats (ArrayList<Cat>), у меня по логике такое только выстраивается:
public static int cats (ArrayList<Cat>);
Правильный вариант:
public static ArrayList<Cat> cats;