Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
Бележка
Групите с интереси на общността сега са се преместили от Yammer в Microsoft Viva Engage. За да се присъедините към Viva Engage общност и да участвате в последните обсъждания, попълнете формуляра Заявете достъп до финанси и операции Viva Engage общността и изберете общността, към която искате да се присъедините.
Тази статия описва наследяването в 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 . На единия е присвоен обект 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++ поддържа заместване, но не поддържа претоварване.