0 or subtypes) or D0: new ArrayList<D0>();, (an object that can store D0 or subtypes) or D0: new ArrayList<D0>();, (an object that can store D0 or subtypes) or...  and so on. Seven different cases:     0) new ArrayList<