X++ inheritance

Šajā rakstā ir aprakstīta pārmantošana programmā X++, tostarp tas, kā izveidot apakšklasi un ignorēt metodi.

Apakšklases izveide

Apakšklases ir klases, kas paplašinās vai pārmanto no citām klasēm. Klase var paplašināt tikai vienu citu klasi. Vairākkārtēja pārmantošana netiek atbalstīta. Ja paplašināt klasi, apakšklase pārmanto visas metodes un mainīgos vecākklasē ( virsklasē). Apakšklases ļauj atkārtoti izmantot esošo kodu konkrētākam mērķim. Tāpēc tie palīdz ietaupīt laiku projektēšanas, izstrādes un testēšanas laikā. Lai pielāgotu superklases darbību, ignorējiet apakšklases metodes. Superklase bieži tiek dēvēta par bāzes klasi, un apakšklase bieži tiek dēvēta par atvasinātu klasi.

Subclass example

Tālāk sniegtajā piemērā vispirms tiek izveidota klase ar nosaukumu Punkts. Pēc tam tā paplašina Point klasi, lai izveidotu jaunu klasi ar nosaukumu ThreePoint.

class Point
{
    // Instance fields.
    real x; 
    real y; 

    // Constructor to initialize fields x and y.
    void new(real _x, real _y)
    { 
        x = _x;
        y = _y;
    }
}

class ThreePoint extends Point
{
    // Additional instance fields z. Fields x and y are inherited.
    real z; 

    // Constructor is overridden to initialize z.
    void new(real _x, real _y, real _z)
    {
        // Initialize the fields.
        super(_x, _y); 
        z = _z;
    }
}

Klases pārmantošanas novēršana

Jūs varat novērst klašu pārmantošanu, izmantojot galīgo modifikatoru.

public final class Attribute
{
    int objectField;
}

Metodes ignorēšana

Metodes klasē pārmanto jebkura klase, kas paplašina klasi. Lai mainītu mantotās metodes funkcionalitāti, apakšklasē izveidojiet metodi un pēc tam piešķiriet šai metodei tādu pašu nosaukumu un parametrus kā virsklases metodei. Šo procesu sauc par metodes ignorēšanu .

Instancējot apakšklasi, atsauci var piešķirt vai nu virsklases tipa mainīgajam, vai apakšklases tipam. Neatkarīgi no mainīgā veida tiek saukta ignorētā metode.

Nākamajā koda piemērā apakšklase ignorē rakstīšanas metodi. Tiek izveidoti divi mainīgie, abi ar tipu Punkts . Vienam tiek piešķirts Point objekts, otram tiek piešķirts ThreePoint objekts. Kad rakstīšanas metode tiek izsaukta ThreePoint objektā, tiek izsaukta metodes ThreePoint versija.

class Point
{
    // Instance fields.
    real x;
    real y;

    // Constructor to initialize fields x and y.
    void new(real _x, real _y)
    {
        x = _x;
        y = _y;
    }

    void write()
    {
        info("(" + any2Str(x) + ", " + any2Str(y) + ")");
    }
}

class ThreePoint extends Point
{
    // Additional instance fields z. Fields x and y are inherited.
    real z;

    // Constructor is overridden to initialize z.
    void new(real _x, real _y, real _z)
    {
        // Initialize the fields.
        super(_x, _y);
        z = _z;
    }

    void write()
    {
        info("(" + any2Str(x) + ", " + any2Str(y) + ", " + any2Str(z) + ")");
    }

}

// Code that creates Point objects and calls the write method.
Point point2 = new Point(1.0, 2.0);
Point point3 = new ThreePoint(3.0, 4.0, 5.0);

point2.write();
// Output is "(1.0, 2.0)".

point3.write();
// Output is "(3.0, 4.0, 5.0)".

Metožu ignorēšanas novēršana

Jūs nevarat ignorēt statiskās metodes, jo tās pastāv katrā klasē. Lai aizsargātu citas sensitīvas metodes vai pamatmetodes no ignorēšanas, izmantojiet galīgo modifikatoru. Nākamajā piemērā, tā kā methodAtt ir pasludināts par galīgo, to nevar ignorēt nevienā klasē, kas paplašina atribūtu. Nenorādiet jaunas un nepabeidziet metodes kā galīgos.

Tālāk sniegtajā piemērā ir parādīts, kā lietot galīgo atslēgvārdu.

public class Attribute
{
    int objectVariable;

    final void methodAtt()
    {
        //Some statements
    }
}

Ignorēšana pret pārslodzi

Ignorēšana notiek, kad apakšklase maina metodes virsklases ieviešanu, bet abām metodēm ir vienāds paraksts.

Turpretī pārslodze rodas, ja vairākām metodēm ir vienāds nosaukums, bet metodēm ir atšķirīgi paraksti (atgriešanas tipi, parametru saraksti vai abi). X++ atbalsta ignorēšanu, bet neatbalsta pārslodzi.