What does the following Java code demonstrate?
public class Inventory<T extends Item> {
private List<T> items = new ArrayList<>();
public void addItem(T item) {
items.add(item);
}
public T getItem(int index) {
return items.get(index);
}
public static void main(String[] args) {
Inventory<Potion> potionInventory = new Inventory<>();
potionInventory.addItem(new Potion());
Potion potion = potionInventory.getItem(0);
potion.drink();
}
}