Le interfacce definiscono che metodi deve implementare una classe per essere considerata di un certo tipo. Ad esempio una macchina, per essere considerata tale deve avere quattro ruote, un telaio, una carrozzeria, etc. etc.
Poi ognuno e' libero di fornire delle implementazioni per le interfacce.
Quando in un programma specifico come parametro di un metodo, o come attributo una interfaccia, do la liberà di specificare qualsiasi oggetto che implementi quella interfaccia.
Tornando all'esempio delle macchine, un carroattrezzi può caricare una macchina anche senza sapere che macchina e'.
PS:Se hai bisogno di una panoramica sui linguaggi ad oggetti ho dedicato un paragrafetto piccolo piccolo nel mio articolo(che trovi nella mia home sotto webApplications).