Ось стаття MSDN про абстрактні класи , але я насправді не розумію ...
Коли я дійсно повинен використовувати абстрактні класи? Які переваги використання абстрактних класів?
Ось стаття MSDN про абстрактні класи , але я насправді не розумію ...
Коли я дійсно повинен використовувати абстрактні класи? Які переваги використання абстрактних класів?
Відповіді:
Абстрактні класи корисні, коли вам потрібен клас з метою успадкування та поліморфізму, але немає сенсу створювати екземпляр самого класу, лише його підкласи. Вони зазвичай використовуються, коли ви хочете визначити шаблон для групи підкласів, що мають спільний код реалізації, але ви також хочете гарантувати, що об’єкти суперкласу не можуть бути створені.
Наприклад, припустимо, вам потрібно створити об’єкти Собака, Кішка, Хом'як та Риба. Вони мають подібні властивості, такі як колір, розмір та кількість ніг, а також поведінка, тому ви створюєте суперклас тварин. Однак якого кольору тварина? Скільки ніг у тваринного предмета? У цьому випадку немає сенсу створювати екземпляр об’єкта типу Animal, а лише лише його підкласи.
Абстрактні класи також мають додаткову перевагу в поліморфізмі - дозволяють використовувати тип (абстрактного) суперкласу як аргумент методу або тип повернення. Якщо, наприклад, у вас був клас PetOwner з методом train (), ви можете визначити його як прийняття об’єкта типу Animal, наприклад, train (Animal a), на відміну від створення методу для кожного підтипу Animal.
Використовуючи абстрактні класи, ми можемо зробити клас загальнішим.
Наприклад: якщо клас A є абстрактним класом і є класи класу B, клас C і клас D, що розширюють абстрактний клас A, то ці підкласи успадкують метод, який вже оголошений в абстрактному класі A, тим самим роблячи метод загальнішим.
Використовуйте абстрактні класи, коли ви визначаєте поведінку для класу в ієрархії вашого класу, який ніколи не буде використовуватися для безпосереднього створення об'єкта.
Отже, на мить подумайте про себе як про Бога. Ваші класи CBabyBoy та CBanyGirl не будуть абстрактними - оскільки це тверді об’єкти, які створюються. З іншого боку, ваші класи CPerson та CAnimal БИЛИ б абстрактними - вони корисні з точки зору ієрархії типів, але ви ніколи не будете працюватиCAnimal dingbat = new Animal();
В основному, ви повинні використовувати абстрактний клас, коли деяка сутність у вашій ієрархії логічно матиме методи, які він не знає, як реалізувати, але це роблять нащадки. Насправді в Інтернеті є мільярди прикладів „реального життя”)