Java Generics Tutorial focuses on confusing aspects and try to explain them with multiple examples
Generic has its own rules for subtypes
Unbounded wildcards removes the generic subtyping restrictions
Bounded wildcards restricts the wildcard domain to specific hierarchy