Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

Реклама в мережі  

   

Статистика  

Користувачі
1
Статті
180
Перегляди статей
595285
   

Пошук по сайту  

   

Ми знаходимось тут  

   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Відеокурс по С++  

   

Рекомендуємо:  

   

Ми в контактах  

   

Сайти  

Українські уроки про ІТ

Єдина Країна! Единая Страна!

 

Українські уроки про програмування

 

 
   

На  цьому уроці ми продовжимо з вами розглядати інструменти поліморфізму. На черзі у нас абстрактні класи, методи і властивості.

Абстрактні класи

Абстрактний клас - це клас оголошений з ключовим словом abstract:

abstract class [ім'я_класу]

{

   // тіло

}

Такий клас має такі особливості:

- Не можна створювати екземпляри (об'єкти) абстрактного класу;

- Абстрактний клас може містити як абстрактні методи / властивості, так і звичайні;

- У класі спадкоємця повинні бути реалізовані всі абстрактні методи і властивості, оголошені в базовому класі.

Навіщо потрібні абстрактні класи?

У самому по собі абстрактному класі, від якого ніхто не успадковується, сенсу немає, так як не можна створювати його екземпляри. В абстрактному класі зазвичай реалізується деяка загальна частина декількох сутностей або іншими словами - абстрактна сутність, яка, як об'єкт, не може існувати, і ця частина необхідна в класах спадкоємців. Конкретні приклади будуть далі.

Абстрактні методи

Розуміння абстрактних методів не буде для вас складним завданням, якщо ви вже ознайомилися з віртуальними методами.

Абстрактний метод - це метод, який не має своєї реалізації в базовому класі, і він повинен бути реалізований в класі-спадкоємця. Абстрактний метод може бути оголошений тільки в абстрактному класі.

Яка ж різниця між віртуальним і абстрактним методом?

- Віртуальний метод може мати свою реалізацію в базовому класі, абстрактний - ні (тіло порожнє);

- Абстрактний метод повинен бути реалізований в класі спадкоємця, віртуальний метод перевизначати необов'язково.

Оголошення абстрактного методу відбувається за допомогою ключового слова abstract, і при цьому фігурні дужки опускаються, крапка з комою ставиться після заголовка методу:

[модифікатор доступу] abstract [тип] [ім'я методу] ([аргументи]);

Реалізація абстрактного методу в класі спадкоємця відбувається так само, як і перевизначення методу - за допомогою ключового слова override:

[модифікатор доступу] override [тип] [ім'я методу] ([аргументи])

{

  // Реалізація методу

}

Абстрактні властивості

Створення абстрактних властивостей не сильно відрізняється від методів:

protected [тип] [поле, яким управляє властивість];

[модифікатор доступу] abstract [тип] [ім'я властивості] {get; set; }

Реалізація в класі-спадкоємця:

[модифікатор доступу] override [тип] [ім'я властивості]

{

  get {тіло аксессор get}

  set {тіло аксессор set}

}

Приклад

Як приклад, наведу програму схожу на ту, яка була в попередньому уроці про віртуальні методах, де виводилася інформація про людину / студенті / школяра. Зараз вже будуть тварини. Тоді ми могли створити людину без статусу (не студент, НЕ школяр), у якого була деяка інформація, а зараз у нас буде абстрактна сутність Тварина, об'єкт якої створювати не можна і немає сенсу, так як кожна тварина буде конкретного подцарства - ссавець, риба, птах:

abstract class Animal

{

   public string Name {get; set; }

   public string Type {get; protected set; }

 

   public abstract void GetInfo (); // Оголошення абстрактного методу

}

class Parrot: Animal

{

   public Parrot (string name)

   {

     Name = name;

     Type = "Птах";

   }

   public override void GetInfo () // реалізація абстрактного методу

   {

     Console.WriteLine ("Тип:" + Type + "\ n" + "Ім'я:" + Name + "\ n");

   }

}

class Cat: Animal

{

   public Cat (string name)

   {

     Name = name;

     Type = "Ссавець";

   }

   public override void GetInfo () // реалізація абстрактного методу

   {

     Console.WriteLine ("Тип:" + Type + "\ n" + "Ім'я:" + Name + "\ n");

   }

}

class Tuna: Animal

{

   public Tuna (string name)

   {

     Name = name;

     Type = "Риба";

   }

   public override void GetInfo () // реалізація абстрактного методу

   {

     Console.WriteLine ("Тип:" + Type + "\ n" + "Ім'я:" + Name + "\ n");

   }

}

class Program

{

   static void Main (string [] args)

   {

     List <Animal> animals = new List <Animal> ();

     animals.Add (new Parrot ("Кеша"));

     animals.Add (new Cat ("Пушок"));

     animals.Add (new Tuna ("Тема"));

 

     foreach (Animal animal in animals)

       animal.GetInfo ();

 

     Console.ReadKey ();

   }

}

У підсумку, ми всі так само працюємо з одним списком тварин, і, викликаючи один метод GetInfo (), ми отримуємо інформацію про відповідному тваринному.

При спробі створити об'єкт абстрактного класу ми отримаємо помилку "Can not create an instance of the abstract class or interface 'ConsoleApplication1.Animal'":

Animal animal = new Animal (); // Помилка

Домашнє завдання

Створіть абстрактний клас Людина, нехай там буде властивість Ім'я та абстрактний метод СказатиПривітання (), від цього класу буде кілька спадкоємців, які представляють національність (росіянин, українець, американець ...). Має вийти так, що при виклику методу Сказати Привітання() виводилося вітання на мові відповідної національності (Привет, Привіт, Hi ...).

 

PS. Не забуваємо підписуватися на оновлення по електронній пошті у формі нижче!

 

Додати коментар

Захисний код
Оновити

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt