Another way of constraining a generic is to use <T : ...> syntax, where ... is some type. This limits T to being some sub-type of that type, rather than an arbitrary class.

So, here, we constrain Transport to transport a Thingy. Since Animal' extends Thingy, Van can be a Transport<Animal>. But we have no way to create a Transport<String>, for example, as String does not implement the Thingy interface.

You can learn more about this in:
Run Edit