X++: абстрактный класс
[id:032]
Создаем абстрактный класс и метод в нем (внимание на ключевое слово "abstract"):
abstract class BLG32_AbstractClass
{
int iMyVar;
int MyMethod()
{
return iMyVar + 100;
}
}
Еще класс с методом main():
class BLG32_Class
{
static void main(Args _args)
{
BLG32_AbstractClass cls;
cls = new BLG32_AbstractClass();
}
}
Что получил? Ошибка компиляции. На то он и абстрактный, что нельзя создать объект этого класса.
Исправляем ошибку. Для этого сделаем класс BLG32_Class наследником от BLG32_AbstractClass и будет обращаться к реальному классу, а не какой-то там абстракции:
class BLG32_Class extends BLG32_AbstractClass
{
static void main(Args _args)
{
BLG32_AbstractClass cls;
cls = new BLG32_Class();
print cls.MyMethod();
pause;
}
}
Я увидел цифру 100. А ведь мы даже не переопределяли метод MyMethod() в классе BLG32_Class! А все потому, что MyMethod() вполне реальный метод, несмотря на то, что класс, где он размещен, абстрактный.
Экспериментируем дальше, сделай метод MyMethod() абстрактным:
abstract class BLG32_AbstractClass
{
int iMyVar;
abstract int MyMethod()
{
// Абстрактный метод должен быть пустым, иначе - заругають!
//return iMyVar + 100;
}
}
Заметь, я отчистил тело метода.
А в классе BLG32_Class я переопределил метод:
class BLG32_Class extends BLG32_AbstractClass
{
int MyMethod()
{
return iMyVar + 1000;
}
static void main(Args _args)
{
BLG32_AbstractClass cls;
cls = new BLG32_Class();
print cls.MyMethod();
pause;
}
}
Результат: цифра 1000.
Итак:
- в неабстрактный метод абстрактного класса можно что-нибудь написать
- тело абстрактного метода должно быть пустым (как у интерфейса)
- в отличие от наследования интерфейса, при наследовании от абстрактного класса начинает работать полезный пункт «Перекрыть метод». Попробуй:
Переименуй метод MyMethod() во что-нибудь другое. Щелкни правой клавишей в окне проекта на классе BLG32_Class, пункт «Перекрыть метод» и тебе откроется список методов, доступных для перегрузки. Не правда ли, это хорошая возможность поберечь свои пальцы?
Комментариев нет:
Отправить комментарий