Что не так то? Выводит 3 строки: [com.javarush.task.task08.task0820.Solution$Cat@74a14482, com.javarush.task.task08.task0820.Solution$Cat@677327b6, com.javarush.task.task08.task0820.Solution$Cat@4554617c, com.javarush.task.task08.task0820.Solution$Cat@1540e19d] [com.javarush.task.task08.task0820.Solution$Dog@6d6f6e28, com.javarush.task.task08.task0820.Solution$Dog@7f31245a, com.javarush.task.task08.task0820.Solution$Dog@14ae5a5] [com.javarush.task.task08.task0820.Solution$Dog@6d6f6e28, com.javarush.task.task08.task0820.Solution$Dog@7f31245a, com.javarush.task.task08.task0820.Solution$Dog@14ae5a5]
package com.javarush.task.task08.task0820;

import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*
Множество всех животных
*/

public class Solution {
    public static void main(String[] args) {
        Set<Cat> cats = createCats();
        Set<Dog> dogs = createDogs();

        Set<Object> pets = join(cats, dogs);
        printPets(pets);

        removeCats(pets, cats);
        printPets(pets);
    }

    public static Set<Cat> createCats() {
        HashSet<Cat> result = new HashSet<Cat>();
        Collections.addAll(result,new Cat(), new Cat(), new Cat(), new Cat());
        return result;
    }

    public static Set<Dog> createDogs() {
        HashSet<Dog> result = new HashSet<>();
        Collections.addAll(result, new Dog(), new Dog(), new Dog());
        return result;
    }

    public static Set<Object> join(Set<Cat> cats, Set<Dog> dogs) {
        HashSet<Object> result=new HashSet<>();
        Collections.addAll(result, cats, dogs);
        return result;
    }

    public static void removeCats(Set<Object> pets, Set<Cat> cats) {
        pets.remove(cats);
    }

    public static void printPets(Set<Object> pets) {
        Iterator<Object> it=pets.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    }
    public static class Cat{

    }
    public static class Dog{

    }
}