Start here. This is the direct spoken answer to practice first.
Overview
A bound is valuable when the generic implementation needs operations that plain Object does not provide.
A bounded type parameter restricts which types may be substituted and lets generic code use the bound's operations. For example, <T extends Comparable<? super T>> T max(List<T> values) says every element can be compared in a compatible way and the result has the same type as the elements. An upper bound uses extends for classes and interfaces. Multiple bounds are allowed, with at most one class bound and that class listed first.