public static class Animal { public String toString() { return getClass().getSimpleName(); } } public static class Rat extends Animal {} public static class Lion extends Animal {} public static class Cage { /* above */ } public static void main(String[] args) { Cage animals = new Cage(); Cage lions = new Cage(); // OK to put a Rat into a Cage animals.add(new Rat()); lions.add(new Lion()); // invoke the super generic method lions.transferTo(animals); animals.showAnimals(); }