Ali ima lahko abstraktni razred konstruktor?

Ali ima lahko abstraktni razred konstruktor?

Če je, kako ga lahko uporabimo in za katere namene?

Rešitev

Da, abstraktni razred ima lahko konstruktor. Razmislite o tem:

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);
    }
}

Nadrazred Product je abstrakten in ima konstruktor. Konkretni razred TimesTwo ima konstruktor, ki samo trdo kodira vrednost 2. Konkretni razred TimesWhat ima konstruktor, ki omogoča klicatelju, da določi vrednost.

Abstraktni konstruktorji se pogosto uporabljajo za uveljavljanje omejitev ali invariant razreda, kot so minimalna polja, potrebna za vzpostavitev razreda.

OPOMBA: Ker v nadrejenem razredu ni privzetega konstruktorja (ali konstruktorja brez ukazov) abstraktnem razredu, mora konstruktor, uporabljen v podrazredu, izrecno klicati nadrejeni konstruktor.

Komentarji (8)

Da, lahko ima konstruktor, ki je definiran in se obnaša enako kot konstruktor kateregakoli drugega razreda. Razen tega, da abstraktnih razredov ni mogoče neposredno instancirati, temveč le razširiti, zato je uporaba vedno iz konstruktorja podrazreda.

Komentarji (0)

Razmislite o tem:

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;
    }
}

Nadrazred je abstrakten in ima konstruktor.

Komentarji (3)