The actual object held by rd is not a direct RequestDispatcher instance, but rather another class which implements the RequestDispatcher interface. As such it must provide an implementation of all the methods RequestDispatcher requires. This is a guarantee enforced by the compiler.
You can get the actual object type held:
System.out.println(rd.getClass().getName());
Note that the code won't always output something easily decipherable or make sense (particularly when dealing with nested/anonymous classes), but it will return what implementing class object is being held.