Pues hombre, sería recomendable que indicaras qué problemas te está dando.
A ojo de buen o mal cubero te puedo decir que estás rompiendo la regla de oro para el uso de interfaces en Delphi: nunca mezclar referencias a interfaz con referencias a objetos y mucho menos hacer moldeos del tipo
Código Delphi
[-]
Lista.Items.Add(IntToStr(interfaz.getValor));
Aquí interfaz es una referencia a la interfaz INotas lo cual aumenta el número de referencias a ella. Pero al hacer el moldeo y agregarlo como si fuese un entero a Lista, no hay manera de decrementar la referencia en algún momento y el objeto que implementa la interfaz se queda colgado en memoria.
Tendría que revisar con más detalle pero el punto es que el mezclar objetos e interfaces generalmente provoca una desincronización en el número de referencias a la interfaz lo que usualmente termina en un "Invalid pointer operation" o un "Access Violation".
Para empezar, si requieres guardar listas de interfaces entonces usa algo más apropiado como TInterfaceList.
// Saludos