During the type erasure process, the Java compiler erases all type parameters and replaces each with its first bound if the type parameter is bounded, or Object if the type parameter is unbounded.
Protected methods: a protected method is similar to a private method, with the addition that it can be called with, or without, an explicit receiver, but that receiver is always self (it's defining class) or an object that inherits from self.
A friend function of a class is defined outside that class' scope but it has the right to access all private and protected members of the class. Even though the prototypes for friend functions appear in the class definition, friends are not member functions.
Heh. When I was at Apple we brought in Bjarne Stroustrup (the author of C++) to give a talk. He spent most of it on something like "things I wouldn't have done if I knew then what I know now", and among those he would never have come with friend functions.