I have many classes that implement an interface
If BaseClass is that interface and you wish to store any sub type of BaseClass in ArrayList or Stack, declaration ArrayList<Class<? extends BaseClass>> is wrong for that purpose. It would simply be like,
List<BaseClass> arrList = new ArrayList<BaseClass>();
Can I have Stacks , Queues and ArrayLists defined like this?
Yes, you can define ArrayList or Stack on base type interface and put in Objects of concrete sub classes.
In my scenario each object will be from a different class in the
Stack, or ArrayList?
Yes, if you have inserted so. You are allowed to insert any sub type of BaseClass in that ArrayList so if you have put such elements , those will be there.
What are the pros and cons of such an implementation?
These would be same as already listed in ChiefTwoPencils's answer - that you have liberty to store various types of Objects in one List but when you retrieve objects from list to work on, you might have to check their type etc ( if interested in some that sub type's specific behavior ).
Hope it helps !!
BaseClass, you are looking forArrayList<BaseClass>.