I have classes A, B, C and D where B extends A, C extends A and
You could just declare:
ArrayList mix = new ArrayList();
You can add any element of class A or any of its subclasses into such a list. It is just that when you get from that list, you will only be able to call methods available on A.
Note that A is not limited to being a "full fledged" class: it can be an abstract class or even an interface.