You are faced with "generics." They are very well explained in this guide .
In short, they let you specify the type that contains the storage class, for example, Listor Set. If you write Set<String>, you stated that this set should contain only Strings and will receive a compilation error if you try to put something else there:
Set<String> stringSet = new HashSet<String>();
stringSet.add("hello");
stringSet.add(3);
^^^^^^^^^^^
, , , , :
public abstract class AbstClass<T extends Variable> {
, Variable, , Variable.
, , AbstClass, :
public void doThing(AbstClass<?> abstExtension) {
? - , " , AbstClass Variable".