Abstraktní třída vs. rozhraní
Abstraktní třída (nebo typ) je typ v nominativním typovém systému deklarovaném programem. Ačkoli název napovídá, abstraktní třída může nebo nemusí zahrnovat abstraktní metody nebo vlastnosti. Třída rozlišování odkazuje na různé jazykové konstrukce, které mohou být použity k implementaci abstraktních typů. Abstraktní třídy mohou být charakterizovány problémem designu, který udržuje nejlepší objektově orientované programování a jejich nedokončené povahy.
Rozhraní je abstraktní typ, který musí třídy implementovat k určení rozhraní (obecně řečeno). Rozhraní mohou obsahovat pouze podpisy metod a konstantní deklarace (statické i konečné), nikdy definice metod. Rozhraní simulují více dědičností a používají se ke kódování podobností sdílených mezi různými typy tříd.
Abstraktní typy lze vytvářet, označovat nebo simulovat několika různými způsoby. Programátor může označit abstraktní typy explicitně pomocí abstraktního klíčového slova, zahrnutím jedné nebo více metod do definice třídy, zdědění z jiného abstraktního typu bez potlačení chybějících funkcí nezbytných pro dokončení definice třídy, nebo odesláním konkrétní metody na objektově orientovaný programovací jazyk známý jako tento, který metodu neimplementuje přímo.
Rozhraní lze definovat pomocí abstraktních metod. Třídy mohou být také implementovány do rozhraní. Pokud třída implementuje rozhraní a neimplementuje všechny své metody, musí se použít signifikantní abstrakt, jinak ten signifikant není nutný (protože všechna rozhraní jsou inherentně abstraktní). Třídy mohou také implementovat více rozhraní.
Zatímco rozhraní se používají ke specifikování obecných rozhraní, lze pro definování a vynucení protokolu použít abstraktní typy (což je sada operací, které musí podporovat všechny objekty, které implementují požadovaný protokol). Abstraktní typy se neobjevují v jazycích bez subtypování. Jako takové podtypy jsou nuceny implementovat všechny potřebné funkce a zajistit správnost provádění programu. Existuje několik způsobů, jak lze vytvořit abstraktní typy: úplné abstraktní základní třídy jsou třídy, které jsou buď výslovně prohlášeny za abstraktní, nebo obsahují abstraktní (neimplementované) metody; Běžné systémy objektů Lisp zahrnují mixiny, které jsou založeny na systému Flavours; Java, samozřejmě; a zvláštnosti, které slouží jako rozšíření Smalltalk.
Souhrn:
1. Abstraktní třídy (nebo typy) vyhlašují programy; rozhraní jsou abstraktní typy, které musí všechny třídy implementovat, aby určily své rozhraní.
2. Abstraktní typy lze označit explicitně pomocí klíčového slova; rozhraní jsou ze své podstaty abstraktní, proto není nutné je označovat pomocí klíčového slova vůbec (pokud konkrétní třída implementuje rozhraní, ale neimplementuje všechny své metody).