Then think of a Servlet as a Java Application that runs inside a servlet container (like Tomcat) and gets executed once a request comes in.
The HTTP request is a series of bits in a stream, typically but not necessarily text data.
The container accepts the request, reads it and then parses the information into an internal representation.
The internal concrete implementation must implement the HttpServletRequest interface, but as long as it 'behaves like' a HttpServletRequest you don't care what the actual class is.
The container then passes this instance to the Servlet so that the servlet can manage the request.
The Servlet container knows you will want to send a response, so it again creates a class that behaves like a HttpServletResponse and gives that to the servlet to return the response.
Once the Servlet is done, the container once again takes responsibility for taking the data from the HttpServletResponse and sending it to the HTTP client.