Примечание. Абстрактный класс может содержать и полностью определенные методы, в отличие от сходного с ним по предназначению специального вида класса

Абстрактный класс может содержать и полностью определенные методы, в отличие от сходного с ним по предназначению специального вида класса, называемого ин­терфейсом. Интерфейсы рассматриваются в следующей главе.

Если в классе есть хотя бы один абстрактный метод, весь класс также должен быть описан как абстрактный, например:

class Monster: Spirit

{

//...

override public void Passport()

{

Console.WriteLine("Monster {0} \t health = {1} ammo = {2}".

name, health, ammo);

}

//...

}

class Daemon: Monster

{

//...

override public void Passport()

{

Console.WriteLine(

"Daemon {0} \t health = {1} ammo = {2} brain = {3}".

Name.Health, Ammo, brain);

}

// Полный текст этих классов приведен в главе 12

}

Абстрактные классы используются при работе со структурами данных, предна­значенными для хранения объектов одной иерархии, и в качестве параметров методов. Если класс, производный от абстрактного, не переопределяет все абст­рактные методы, он также должен описываться как абстрактный.

Можно создать метод, параметром которого является абстрактный класс. На место этого параметра при выполнении программы может передаваться объект любого производного класса. Это позволяет создавать полиморфные методы, работаю­щие с объектом любого типа в пределах одной иерархии. Полиморфизм в раз­личных формах является мощным и широко применяемым инструментом ООП.

ПРИМЕЧАНИЕ

Мы уже использовали полиморфизм в разделе «Оператор foreach» (см. с. 136) для того, чтобы метод PrintArray мог работать с массивом любого типа. Еще один при­мер применения абстрактных и виртуальных методов имеется в главе 10.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: