X++ inheritance

Bu makalede, bir alt sınıfın nasıl oluşturulacağı ve bir yöntemin nasıl geçersiz kılınacağı da dahil olmak üzere X++'ta devralma açıklanmaktadır.

Alt sınıf oluşturma

Alt sınıflar , diğer sınıfları genişleten veya diğer sınıflardan devralan sınıflardır. Bir sınıf yalnızca bir diğer sınıfı genişletebilir. Birden çok devralma desteklenmez. Bir sınıfı genişletirseniz, alt sınıf üst sınıftaki (üst sınıf) tüm yöntemleri ve değişkenleri devralır. Alt sınıflar, var olan kodu daha belirli bir amaç için yeniden kullanmanıza olanak verir. Bu nedenle, tasarım, geliştirme ve test sırasında zaman kazanmanıza yardımcı olur. Bir üst sınıfın davranışını özelleştirmek için bir alt sınıftaki yöntemleri geçersiz kılın. Üst sınıf genellikle temel sınıf olarak bilinir ve alt sınıf genellikle türetilmiş sınıf olarak bilinir.

Subclass example

Aşağıdaki örnek önce Point adlı bir sınıf oluşturur. Ardından Point sınıfını genişleterek ThreePoint adlı yeni bir sınıf oluşturur.

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

Sınıf devralmayı önleme

Son değiştiriciyi kullanarak sınıfların devralınmasını engelleyebilirsiniz.

public final class Attribute
{
    int objectField;
}

Yöntemi geçersiz kılma

Bir sınıftaki yöntemler, sınıfını genişleten herhangi bir sınıf tarafından devralınır. Devralınan bir yöntemin işlevselliğini değiştirmek için alt sınıfta bir yöntem oluşturur ve ardından bu yönteme üst sınıftaki yöntemle aynı adı ve parametreleri verirsiniz. Bu işlem yöntemi geçersiz kılma olarak bilinir.

Alt sınıfın örneğini oluştururken, başvuruyu üst sınıf türündeki bir değişkene veya alt sınıf türüne atayabilirsiniz. Değişkenin türünden bağımsız olarak geçersiz kılınan yöntem çağrılır.

Aşağıdaki kod örneğinde, alt sınıf yazma yöntemini geçersiz kılar. her ikisi de Point türünde iki değişken oluşturulur. Birine bir Point nesnesi atanırken, diğer nesneye bir ThreePoint nesnesi atanır. Yazma yöntemi ThreePoint nesnesinde çağrıldığında, yöntemin ThreePoint sürümü çağrılır.

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

Yöntem geçersiz kılmalarını önleme

Sınıf başına mevcut olduğundan statik yöntemleri geçersiz kılamazsınız. Diğer hassas yöntemleri veya temel yöntemleri geçersiz kılınmasını korumak için son değiştiriciyi kullanın. Aşağıdaki örnekte methodAttson olarak bildirildiğinden, özniteliğini genişleten hiçbir sınıfta geçersiz kılamazsınız. Yeni yöntemleri belirtmeyin veya son olarak sonlandırmayın.

Aşağıdaki örnekte son anahtar sözcüğün nasıl kullanılacağı gösterilmektedir.

public class Attribute
{
    int objectVariable;

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

Geçersiz kılma ve aşırı yükleme

Geçersiz kılma, bir alt sınıf bir yöntemin üst sınıf uygulamasını değiştirdiğinde oluşur, ancak her iki yöntem de aynı imzaya sahiptir.

Buna karşılık, birden fazla yöntem aynı ada sahipse ancak yöntemlerin farklı imzaları olduğunda (dönüş türleri, parametre listeleri veya her ikisi) aşırı yükleme gerçekleşir. X++ geçersiz kılmayı destekler, ancak aşırı yüklemeyi desteklemez.