Môže mať abstraktná trieda konštruktor?

Môže mať abstraktná trieda konštruktor?

Ak áno, ako ho možno použiť a na aké účely?

Riešenie

Áno, abstraktná trieda môže mať konštruktor. Uvažujte o tom:

abstract class Product { 
    int multiplyBy;
    public Product( int multiplyBy ) {
        this.multiplyBy = multiplyBy;
    }

    public int mutiply(int val) {
       return multiplyBy * val;
    }
}

class TimesTwo extends Product {
    public TimesTwo() {
        super(2);
    }
}

class TimesWhat extends Product {
    public TimesWhat(int what) {
        super(what);
    }
}

Nadtrieda Product je abstraktná a má konštruktor. Konkrétna trieda TimesTwo má konštruktor, ktorý len natvrdo kóduje hodnotu 2. Konkrétna trieda TimesWhat má konštruktor, ktorý umožňuje volajúcemu určiť hodnotu.

Abstraktné konštruktory sa často používajú na vynútenie obmedzení alebo invariantov triedy, ako sú minimálne polia potrebné na nastavenie triedy.

POZNÁMKA: Keďže v nadradenej triede nie je žiadny predvolený konštruktor (alebo konštruktor bez príznakov) abstraktnej triede, konštruktor použitý v podtriede musí explicitne volať rodičovský konštruktor.

Komentáre (8)

Áno, môže mať konštruktor, ktorý je definovaný a správa sa rovnako ako konštruktor akejkoľvek inej triedy. Až na to, že abstraktné triedy nemožno priamo inštanciovať, iba rozšíriť, takže použitie je preto vždy z konštruktora podtriedy.

Komentáre (0)

Zvážte toto:

abstract class Product { 
    int value;
    public Product( int val ) {
        value= val;
    }
    abstract public int multiply();
}

class TimesTwo extends Product {
    public int mutiply() {
       return value * 2;
    }
}

Nadtrieda je abstraktná a má konštruktor.

Komentáre (3)