В общем, вот так не работает с котами, все время выводит: "я уличный кот" и все.
Scanner scn = new Scanner(System.in);
        while(!scn.nextLine().equals("")){
            Cat cat = CatFactory.getCatByKey(scn.nextLine());
            System.out.println(cat.toString());
        }
В конце концов дошел до такого:
Scanner scn = new Scanner(System.in);
        String str;
        while(!(str = scn.nextLine()).equals("")){
            Cat cat = CatFactory.getCatByKey(str);
            System.out.println(cat.toString());
        }
заработало, как швейцарский механиЗМ, но всетаки я так и не понял что это дает, зачем мне нужно было String str; объявлять? ХЭЛП ПЛИЗ