Et grensesnitt deklarerer en kontrakt — et sett med metoder som en type må tilby — med ingen (eller minimal) implementering. En abstrakt klasse er en delvis implementert klasse som kan inneholde delt tilstand og konkrete metoder, men ikke kan instansieres. Hovedforskjellen: en klasse kan implementere mange grensesnitt, men kan arve fra bare én klasse.
