Зміст
Починаючи писати програму, Сучасний Розробник насамперед повинен продумати архітектуру майбутнього проекту. З точки зору об`єктно-орієнтованого підходу до розробки програмного забезпечення, це означає, що програміст повинен створити код, який буде складатися з логічних блоків (класів і об`єктів), і продумати їх взаємодію. Код повинен бути підтримуваним. Це означає, що в подальшому дану програму можна буде безболісно доповнити або розширити, не змінюючи її основні складові.

В об`єктно-орієнтованій парадигмі розробки існують три основні інструменти, якими розробники користуються для написання хорошого коду:
- Інкапсуляція.
- Успадкування.
- Поліморфізм.
- Успадкування.
Успадкування
Це процес створення нового класу на основі вже існуючого. Об`єктно-орієнтований підхід насамперед застосовується для того, щоб описати поняття і явища реального світу мовою програмування. Тому, щоб зрозуміти ООП, необхідно навчитися описувати завдання, що стоїть перед програмістом, мовою класів і об`єктів.

Для того, щоб зрозуміти суть процесу успадкування, можна навести приклад з життя. Існує абстрактне поняття»людина". У будь-якої людини є загальні характеристики, якими його можна описати. Це зріст, вага, колір волосся, тембр голосу, і так далі. Іванов Іван, учень 1 " А "класу-це конкретний представник поняття "людина" , тобто, висловлюючись мовою об`єктно-орієнтованого підходу, поняття Іванов Іван-спадкоємець поняття людина. Або, наприклад, сусідський кіт Барсик-спадкоємець поняття " кіт». Можна скласти більш складне успадкування: поняття Барсик успадковується від поняття мейн-кун, яке в свою чергу успадковується від поняття " кіт».
Як це описується мовою програмування?
В розробці програмне забезпечення процес успадкування дає можливість створювати клас на основі інших. Клас-батько називається базовим, а решта-спадкоємці-це похідні. Запозичення полягає в в тому, що нащадкам переходять методи, властивості і поля батьків. Синтаксис успадкування класів в мові програмування C# може виглядати наступним чином. Наприклад:
class Ivan: Person {//тіло класу{
Приклад механізму успадкування КЛАСІВ:
class Person{public int Age { get; set;}} class Ivan: Person{public void Talk () {//Іван розмовляє}}class Peter: Person{public void Walk () {//Петро йде}}class Program{static void Main (string [] args) {Ivan ivan = new Ivan (); ivan.Age = 29; / / позначаємо вікpeter peter = new Peter (); peter.Age = 35ivan.Talk();peter.Walk()();}}
На основі базового класу Person створюються класи спадкоємців, і властивість Age доступна для обох класів.
Конструктор базового класу
Створюючи клас з оголошеним конструктором і клас-спадкоємець, виникає логічне запитання: які конструктори за що відповідатимуть при створенні об`єктів цих класів?
Якщо він заданий тільки в успадкованому класі, то при створенні об`єкта-спадкоємця викликається конструктор за замовчуванням (батьківський), а потім вже його приймач.
Якщо ж конструктори задані і в батьківському, і в дочірньому класах, то для виклику базового використовується ключове слово base. При оголошенні такої структури успадкування для завдання конструктора застосовується наступний синтаксис:
public Ivan (int age) : base (age) {//тіло конструктора}
Успадкування методів КЛАСІВ-найважливіша властивість ООП. При створенні об`єкта класу-спадкоємця аргументи конструктора базового класу передаються в нього ж, після чого викликається його конструктор, а потім виконуються інші виклики конструктора спадкоємця.
Доступ до полів з дочірнього класу
Успадкування доступу до властивостей і методів базового класу з класу-спадкоємця стає можливим, якщо всі вони оголошуються з наступними ключовими словами:
1. Public.
Надає необмежений доступ до членів класу: з Main, з КЛАСІВ-спадкоємців, з інших аналогів.
2. Protected.
Доступ до члена залишається тільки з вихідного класу, або з похідних аналогів.
3. Internal.
Обмеження до члена локалізовано тільки даної збіркою проекту.
4. Protected internal.
Обмеження до члена лімітовано тільки даної збіркою проекту або з похідних класів.

Успадкування доступу до членів класу залежить від ключових слів. Якщо при оголошенні члена як таке не вказано, то доступність встановлюється за замовчуванням (private).
Множинне успадкування
Інтерфейси-це контракт, який надає гарантії, що набір методів буде реалізований у класі спадкоємця інтерфейсу. Останні не містять статичних членів, полів, констант, або конструкторів. Нелогічно і не можна створювати об`єкти інтерфейсу.

Дані структури створюються за межами КЛАСІВ, оголошуються, використовуючи ключове слово interface:
interface IMyInterfave{void MyMethod (int someVar);}
Правило хорошого тону при створенні інтерфейсів-починати ім`я конструкції з великої літери I, щоб в подальшому їх легко було розрізняти. У тілі інтерфейсу оголошуються сигнатури його членів.
Для вказівки того, що клас буде реалізовувати інтерфейс, необхідно так само, як і при зазвичай успадкування, вказати ім`я конструкції після оголошення класу:
class MyClass : IMyInterface{public void MyMethod (int someVar)}
Інтерфейс необхідні для того, щоб реалізовувати множинне успадкування. В мова програмування C++, ножове успадкування КЛАСІВ можливе; в мові C# для цих цілей використовуються інтерфейси. Клас може реалізовувати численну кількість інтерфейсів, в такому випадку вони перераховуються через кому після оголошення класу:
class MyClass: IMyFirstInterface, IMySecondInterface {//тіло класу}
За замовчуванням усі властивості та методи інтерфейсів мають доступ public, оскільки що повинні визначати якийсь функціонал, який в подальшому буде реалізований в класі. Успадкування в C# майже завжди передбачає використання цього зручного інструменту.

Ще трохи про успадкування КЛАСІВ
Java, C#, C++ - всі об`єктно-орієнтовані мови по-своєму реалізують механізм успадкування. Але суть скрізь одна: передати властивості батька об`єкту-нащадку. Інтерфейси, абстрактні класи - це все зручні інструменти для втілення цього завдання.