Для чего нужно ключевое слово super?

Для чего нужно ключевое слово super?
Как и многие другие ключевые слова, super имеет несколько разных значений в зависимости от контекста:
  1. Задать нижнюю границу generic-типа: Consumer<? super Number>
  2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными: int foo = super.foo
  3. Вызвать в конструкторе конструктор родителя: SubClass() { super("subclass param"); }
  4. В случае неопределенности, уточнить родительский тип (на картинке)