1)
Ti passo il primo link che ho trovato sul late binding

2)
Esattamente!Le sotto query estendono la classe astratta Query implementando fisicamente il metodo match!

Quando userai match in query di DB il compilatore non saprà a priori quale Query gli verrà passata, ma si aspetterà solo un oggetto Query e di conseguenza le sotto_classi estese da essa!E siccome match è implementato obbligatoriamente in tutte le sotto-query funzionerà per ogni tipo di ricerca!
del tipo:
codice:
if(query.match([Episodio_in_esame])) {
    //aggiungo l'episodio all'array da ritornare
}