add 1) právě k tomu jsou abstraktní třídy, že definují formu a obsah si pak musíš, když chceš od nich dědit, dodat sám
Příklad by mohl být ten, že máš grafické objekty, které dědí od třídy Objekt, která sama řeší třeba pohyb objektů (mění pozici x a y), takže všechny zděděné objekty už se umí pohybovat. Někde pak máš vykreslovací jádro, kde procházíš všechny vytvořené objekty (tak jak psal KIIV, tj. je to třeba seznam objektů typu Objekt, ale instance jsou vytvořené jako new Ctverec, new Kruh, new Trojuhelnik apod.) a volá nad nimi to vykreslení - funkci Kresli. Ta je v Objekt abstraktní, takže ji sice musíš implementovat v třídách Kruh, Ctverec, Trojuhelnik atd., ale co je podstatné, v tom vykreslovacím jadře nemusíš nic řešit a voláš prostě jen Kresli a je ti buřt, jestli to je Ctverec nebo Kruh a pak ještě (nebo možná a taky hlavně), když časem přidáš další typ objektu (třeba Sestiuhelnik), tak na tom vykreslovacím jádře nemusím měnit nic. To je síla tohoto principu.
add 2) ano, abstraktní třídy jsou tvořeny abstraktní právě proto, aby si je musel zdědit (a dopsat svojí implementační část)
add 3) kdeyž jí nedefinuješ v trida2, tak ta třída je taky abstraktní, takže pokud chceš používat i instance trida2, tak musíš implementovat tu abstraktní část a samozřejmě v trida1 můžeš tu implementaci udělat taky (a samozřejmě jinou, jinak by si jí asi nedělal :))