Non ho capito
Il concetto di ereditarietà multipla mi è abbastanza chiaro. In pratica, onde evitare casini stile C++, è possibile estendere una sola classe attraverso la parola chiave extends. Se si vuole ereditare qualche altra classe allora si implementano le interfacce, attraverso la parola chiave implement. Le classi implementate devono essere delle interfacce, cioè classi con tutti metodi astratti, metodi cioè in cui c'è solo la firma senza implementazione. Ovviamente le sottoclassi hanno poi l'obbligo di sovrascrivere, e quindi implementare, questi metodi.
Quello che non capisco è come avviene ciò nelle Servlet. Procedo per gradi, in modo da far capire cos'è che non capisco. Allora:
1. Se voglio creare una servlet faccio una classe che estende la classe astratta HttpServlet. Questa classe ha tre metodi importanti (service, doGet e doPost) i quali devono essere implementati nella sottoclasse.
2. Quando il mio Servlet Container, nella fattispecie Tomcat, vede una Servlet chiama prima il metodo init che HttpServlet ha ereditato da GenericServlet; poi service ed infine destroy.
3. Il metodo service altro non fa che controllare il tipo di richiesta del client e, in caso di corrispondenza, chiama il metodo appropriato.
Cioè se nel form scrivo:
Codice PHP:
<form action="MyServlet" method="GET">
allora il metodo service dopo un controllo di questo tipo:
Codice PHP:
if(method.equals(METHOD_GET)){
...
doGet(req, resp);
...
}
4. Il metodo doGet della classe HttpServlet è implementato in questo modo:
Codice PHP:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
5. Quando io poi vado ad implementare il mio metodo doGet nella mia Servlet, posso scrivere una cosa di questo tipo:
Codice PHP:
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("Metodo = " +req.getMethod());
}
6. La chiamata al metodo getMethod() di HttpServletRequest mi restituisce quindi il metodo con il quale il client ha interrogato la Servlet, cioè GET.
Ma se vado a vedere nel codice sorgente, l'interfaccia HttpServletRequest ha tutti metodi astratti, tant'è che del metodo getMethod ha solo la firma, cioè:
Codice PHP:
public String getMethod();
DOMANDA : Come si spiega allora che nella mia Servlet invece il metodo getMethod effettivamente fa quello che deve fare, chi è che lo implementa?
Insomma, potrei prenderla come verità rivelata ed usarlo e basta, tanto fa quello che devo fare...ma non mi sembra il modo migliore di impararne il funzionamento 
Grazie per l'attenzione e mi scuso per la prolissità,
Matteo.