Třída není realizátorem zapouzdření, tím je viditelnost metod a vlastností. Třída je realizátorem vytváření objektů.
Nejsem si jisty, co tim chces rict. Co ja chci rict je, ze zapouzdreni lze treba v Jave realizovat dvema zpusoby - viditelnosti v ramci tridy a viditelnosti v ramci modulu (package). Ale k cemu je dobre mit dve varianty stejne abstrakce? Nestacil by na to jen modul? Je to proste neortogonalni navrh jazyka.
To jako že by se podědilo a všechny metody přepsaly znovu? Čeho by se tím dosáhlo?
Prave ze pri datovem dedeni nemusis nic prepisovat, funkce ktere s temi daty pracuji dokonce ani nemusi byt polymorfni (tedy v ramci typoveho systemu mozna ano, ale ne realne). Coz je taky duvod, proc dedeni dat a polymorfismus jsou dve ruzne veci.
Treba vezmi si to Go - kdyz si definujes strukturu a podedis ji v jine (jenom jednonasobna dedicnost je mozna), tak pak metody (je to uz chvile co jsem se Go ucil, takze jsem to pozapomnel) mohou obdrzet tu zdedenou strukturu misto puvodni, ale to je proto, ze skutecne realne bude pracovat s pointerem na tu strukturu jako kdyby to byl pointer na tu puvodni. Bude stacit jen jedna varianta dane metody, takze ta metoda (vnitrne, nikoli z hlediska typoveho systemu) neni jen polymorfni ve svem argumentu, ale je to doslova ta stejna funkce.
Dedicnost dat je i v nekterych databazich, treba Postgres, ktere dovoluji podedit tabulku a tak ji jakoby rozsirit o ruzne dalsi sloupce. Ted tedy nevim jestli dotaz nad tou puvodni tabulkou zahrnuje i jeji potomky, ale asi ano, jinak by to moc nedavalo smysl.
Polymorfismus je zprostředkován protokolem objektu, na vnitřní struktuře metod a stavů je nezávislý.
Takze v pripade dedeni dat je to opacne, nez pises - tam se prave vyhneme polymorfismu, ale spolehame na spolecnou strukturu predka. Proto take data (tridy) neni vhodne dedit vicenasobne, protoze vznika problem diamantu (chceme tam tataz data vickrat ze dvou ruznych predku se spolecnym potomkem?), naopak pri dedeni interfacu, coz je zpusob polymorfismu, tenhle problem nevznika.
Z techto duvodu je praktictejsi nad dedenim a polymorfismem uvazovat separatne, nez je kombinovat. Jinak zase vznika vyse problem neortogonalniho navrhu jazyka, treba v Jave museli pridat interfacy (coz je relativne ciste), ktere v podstate castecne duplikuji funkcionalitu trid, ktera je nedostatecna (neni dovolena vicenasobna dedicnost) proto, ze se polymorfismus micha s datovou dedicnosti. (A z toho pak vyplyvaji ruzne zbytecne otazky, moje oblibena je: Kdy je lepsi pouzit interface a kdy abstraktni tridu?)
A nemá to s děděním v OOP společný jen název?
Prestan se chytat detailu a zamysli se nad tim - jsou to opravdu tri ruzne koncepty, ktere se v tridach smesuji, a trochu pravda problematicka terminologie na tom nic nemeni.