Κοινοποίηση μέσω


Μεταβίβαση X++

Note

Οι ομάδες ενδιαφέροντος της κοινότητας έχουν πλέον μετακινηθεί από το Yammer στο Microsoft Viva Engage. Για να συμμετάσχετε σε μια κοινότητα Viva Engage και να συμμετάσχετε στις τελευταίες συζητήσεις, συμπληρώστε τη φόρμα Αίτηση πρόσβασης στο Finance and Operations Viva Engage Community και επιλέξτε την κοινότητα στην οποία θέλετε να συμμετάσχετε.

Αυτό το άρθρο περιγράφει τη μεταβίβαση σε X++, συμπεριλαμβανομένου του τρόπου δημιουργίας μιας δευτερεύουσας κλάσης και παράκαμψης μιας μεθόδου.

Δημιουργία δευτερεύουσας κλάσης

Οι δευτερεύουσες είναι που επεκτείνουν ή μεταβιβάζονται από άλλες. Μια κλάση μπορεί να επεκτείνει μόνο μία άλλη κλάση. Δεν υποστηρίζεται πολλαπλή μεταβίβαση. Εάν επεκτείνετε μια κλάση, η δευτερεύουσα κλάση λαμβάνει όλες τις μεθόδους και τις μεταβλητές στη γονική κλάση (η υπερ-κλάση). Οι δευτερεύουσες κλάδες σάς επιτρέπουν να χρησιμοποιήσετε ξανά τον υπάρχοντα κώδικα για έναν πιο συγκεκριμένο σκοπό. Επομένως, σας βοηθούν να εξοικονομήσετε χρόνο κατά τη σχεδίαση, την ανάπτυξη και τις δοκιμές. Για να προσαρμόσετε τη συμπεριφορά μιας υπερκλασικής κλάσης, αντικαταστήστε τις μεθόδους σε μια δευτερεύουσα κλάση. Μια υπερκλασική κλάση είναι συχνά γνωστή ως βασική κλάση και μια δευτερεύουσα κλάση είναι συχνά γνωστή ως παραγόμενη κλάση.

Παράδειγμα δευτερεύουσας κλάσης

Το παρακάτω παράδειγμα δημιουργεί πρώτα μια κλάση που ονομάζεται Point. Στη συνέχεια, επεκτείνει την κλάση Point για να δημιουργήσει μια νέα κλάση που ονομάζεται 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;
    }
}

Αποτροπή μεταβίβασης κλάσης

Μπορείτε να αποτρέψετε τη μεταβίβαση των κλάσεων χρησιμοποιώντας τον τελικό τροποποιητή.

public final class Attribute
{
    int objectField;
}

Παράκαμψη μεθόδου

Οι μέθοδοι σε μια κλάση μεταβιβάζονται από οποιαδήποτε κλάση που επεκτείνει την κλάση. Για να αλλάξετε τη λειτουργικότητα μιας μεθόδου μεταβίβασης, δημιουργείτε μια μέθοδο στη δευτερεύουσα κλάση και, στη συνέχεια, δίνετε στη μέθοδο αυτό το ίδιο όνομα και παραμέτρους με τη μέθοδο της υπερκλασικής κλάσης. Αυτή η διαδικασία είναι γνωστή ως παράκαμψη της μεθόδου .

Όταν ξεκινάτε τη δευτερεύουσα κλάση, μπορείτε να αντιστοιχίσετε την αναφορά σε μια μεταβλητή τύπου υπερ-κλάσης ή στον τύπο δευτερεύουσας κλάσης. Ανεξάρτητα από τον τύπο της μεταβλητής, καλείται η μέθοδος αντικατάστασης.

Στο παρακάτω παράδειγμα κώδικα, η δευτερεύουσα κλάση παρακάμπτει τη μέθοδο εγγραφής . Δημιουργούνται δύο μεταβλητές, και οι δύο τύπου Σημείο . Στο ένα αντιστοιχίζεται ένα αντικείμενο Point και το άλλο αντιστοιχίζεται ένα αντικείμενο ThreePoint . Όταν η μέθοδος εγγραφής καλείται στο αντικείμενο ThreePoint , καλείται η έκδοση 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;
    }

    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)".

Αποτροπή παρακάμπτεται η μέθοδος

Δεν είναι δυνατή η παράκαμψη στατικών μεθόδων, επειδή υπάρχουν ανά κλάση. Για να προστατεύσετε άλλες ευαίσθητες μεθόδους ή βασικές μεθόδους από την παράκαμψη, χρησιμοποιήστε τον τελικό τροποποιητή. Στο παρακάτω παράδειγμα, επειδή η methodAtt δηλώνεται ως τελική, δεν μπορεί να αντικατασταθεί σε οποιαδήποτε κλάση που επεκτείνει το Attribute. Δεν θα πρέπει να καθορίσετε νέες ή οριστικοποίηση μεθόδων ως τελικές.

Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να χρησιμοποιήσετε την τελική λέξη-κλειδί.

public class Attribute
{
    int objectVariable;

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

Παράκαμψη έναντι υπερφόρτωσης

Η παράκαμψη πραγματοποιείται όταν η υλοποίηση μιας μεθόδου υπερ-κλάσης αλλάζει από την υλοποίηση της μεθόδου αυτής της δευτερεύουσας κλάσης, αλλά οι υπογραφές και των δύο μεθόδων είναι ίδιες.

Αντιθέτως, η υπερφόρτωση πραγματοποιείται όταν περισσότερες από μία μέθοδοι έχουν το ίδιο όνομα, αλλά οι μέθοδοι έχουν διαφορετικές υπογραφές (τύποι επιστροφής, λίστες παραμέτρων ή και τα δύο). Το X++ υποστηρίζει την αντικατάσταση, όμως δεν υποστηρίζει υπερφόρτωση.