Actually you can use an interface to achieve what you want.
public interface Animal {
String getName();
String getVoice();
}
public class Dog implements Animal{
@Override
String getName(){return "Dog";}
@Override
String getVoice(){return "woof!";}
}
you can then use the collections using
List <Animal> animalGroup = new ArrayList<Animal>();
animalGroup.add(new Dog());