Well,
public <Reptile, S extends Reptile> void listContent(List<Reptile> myList, List<S> myOtherList)
Here the Reptile has nothing to do with your Reptile class!! The above declaration is just similar to:
public <R, S extends R> void listContent(List<R> myList, List<S> myOtherList)
So, here R and S are just 2 type parameters. Now considering erasure (or even without that), these 2 parameters could be anything say Integer, String or say ClassXYZ, ClassABC or whatever based on the where we are making the generic function call.
The walk() methos is only available to Reptile and its subclasses - by specifying:
public <R extends Reptile, S extends R> void listContent(List<R> myList, List<S> myOtherList)
we just say that.
----------------
"Towards 1.5 exam on Aug 4th"