TOC

This article has been localized into Czech by the community.

Třídy:

Abstraktní třídy

Abstraktní třídy označené klíčovým slovem "abstrakt" v definici třídy se obvykle používají k definování základní třídy v hierarchii. Co je na nich zvláštní, je to, že nemůžete vytvořit jejich instanci - pokud se pokusíte, dostanete chybu kompilace. Místo toho je musíte podřídit, jak je uvedeno v kapitole o dědictví, a vytvořit instanci vaší podtřídy. Takže kdy potřebujete abstraktní třídu? Opravdu záleží na tom, co děláte.

Pravdu říct, většina věcí lze udělat bez použití abstraktních tříd, ale v určitých případech, jako například u frameworků, jsou abstraktní třídy velmi užitečná pomůcka. To je také důvod, proč .NET sám o sobě obsahuje spoustu abstraktních tříd. Abstraktní třídy se hodí, jak jméno napovídá, když popisujeme něco abstraktního, něco co je spíše koncept, než nějaká reálná věc.

V tomto příkladu vytvoříme základní třídu pro čtyřnohá zvířata a pak vytvoříme třídu psů, která z ní dědí, jako je to zde:

namespace AbstractClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Console.WriteLine(dog.Describe());
            Console.ReadKey();
        }
    }

    abstract class FourLeggedAnimal
    {
        public virtual string Describe()
        {
            return "Not much is known about this four legged animal!";
        }
    }

    class Dog : FourLeggedAnimal
    {

    }
}

Když to porovnáte s příklady z kapitoly o dědičnosti, neuvidíte nijak velký rozdíl. Největším rozdílem, je slovíčko "abstract" před deklarací třídy FourLeggedAnimal. Jak jistě vidíte, vytvořili jsme novou instanci třídy Dog, a pak jsme zavolali zděděnou metodu Desribe() ze třídy FourLeggedAnimal. Teď si naopak zkuste vytvořit instanci vytvořit instanci třídy FourLeggedAnimal:

FourLeggedAnimal someAnimal = new FourLeggedAnimal();

Vrátí vám to tento kompilační error

Nemůžete vytvořit instanci abstraktní třídy nebo rozhraní 'AbstractClasses.FourLeggedAnimal'

Nyní, jak vidíte, jsme zdědili metodu Describe(), ale v této formě pro naši třídu Dog není moc užitečná. Pojďme ji přepsat.

class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        return "This four legged animal is a Dog!";
    }
}

V tomto případě provedeme kompletní přepis, ale v některých případech byste možná chtěli použít chování základní třídy společně s novou funkcionalitou. To lze provést pomocí klíčového slova base, které odkazuje na třídu, ze které dědíme:

abstract class FourLeggedAnimal
{
    public virtual string Describe()
    {
        return "This animal has four legs.";
    }
}


class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        string result = base.Describe();
        result += " In fact, it's a dog!";
        return result;
    }
}

Samozřejmě můžete vytvořit další podtřídy třídy FourLeggedAnimal - možná kočku nebo lva? V další kapitole provedeme pokročilejší příklad a také představíme abstraktní metody více. Čtěte dál.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!