Czy jest jakaś różnica między interfejsami a klasami abstrakcyjnymi, które mają tylko metody abstrakcyjne?

Powiedzmy, że mamy klasę abstrakcyjną i niech ta klasa ma tylko abstrakcyjne metody. Czy ta klasa abstrakcyjna różni się od interfejsu, który ma tylko te same metody? Chcę wiedzieć, czy istnieją jakieś różnice zarówno filozoficzne, obiektywne, jak i podstawowe w implementacji języka programowania...