ad 1/ Přesně tak. V Haskelu, Rustu a dalších moderních jazycích je spojen bod 1 a bod 3 v elegantní symbióze. Můžeš si to představit jako speciální konstruktory v C#. Až na to, že ty konstruktory jsou sice stejného typu, ale různé variantě (instance) typu. A díky tomu se dají perfektně podchytit všechny strategie a na žádnou nezapomenout. Díky tomu, že metody/funkce mohou přijímat buď konkrétní typ, nebo jen konkrétní instanci toho typu, tak to opět hodně pomáhá.
ad 2/ ne, protože to nefunguje C# to (do verze 8 snad?) neumí.
ad 4/ neudělám to jinak, protože to nejde. Musím udělat jednu metodu a v ní pomocí instanceof větvit. Ne, že by to byla taková katastrofa, ale ve spojení s bodem 2 to je dost trapný.
ad 5/ to nevadí.
ad 6/ protože to zbuchne na produkci, páč tam zmizela metoda
Jako přeložit kód, kdy volám metodu, o které vím, že neexistuje, to ti od jazyka přijde v pořádku? (Nebavíme se o dynamic-dispatch, a pod prosím.)
Závěrem: Chtěl jsi vysvětlit, proč nám C#/Java nestačí. Tož tady to máš. Ber nebo nech být. Prostě mám určité požadavky, jsem trochu zmlsaný, a navíc v dnešní době si to mohu dovolit. Ty žiješ ve své bublině, až tak, že si nedovedeš představit, že by to mohlo být jinak. Můžeš se mnou nesouhlasit, můžeš si myslet, že problém je na mojí straně, nech sa páčí. Já jen uvedl pár příkladů, které mě teď z patra napadli a které mě schází. Asi bych našel i další. Určitě se ale nebudu o své pravdě přetahovat.