Наследство в Java (с пример)

⚡ Умно обобщение

Наследство в Java е механизъм, при който един клас придобива полетата и методите на друг клас чрез ключовата дума extends. Той насърчава повторната употреба на кода и моделира Is-A връзка между суперклас и неговите подкласове.

  • 🧬 Дефиниция на наследяването: Един клас придобива полетата и методите на друг, използвайки extends.
  • 👨👩👧 Връзка „е-А“: Моделира йерархия от родителски (супер) клас и дъщерен (под) клас.
  • 🗂️ Пет вида: Единично, множествено, многостепенно, йерархично и хибридно наследяване.
  • 🚫 Java Ограничение: Java не поддържа множествено или хибридно наследяване чрез класове.
  • 🔑 Супер ключова дума: Достъпва до променливи, методи и конструктори на родителския клас от подклас.
  • Възползвайте се: Използва повторно тестван код и добавя функции чрез нови класове, без да променя съществуващите.

Наследство в Java

Какво е наследство?

наследяване е механизъм, при който един клас придобива собствеността на друг клас. Например, едно дете наследява чертите на родителите си. С наследяването можем да използваме отново полетата и методите на съществуващия клас. Следователно наследяването улеснява повторното използване и е важна концепция за ООП.

В какво е наследството Java?

Java наследяване е механизъм, при който един клас придобива собствеността на друг клас. в Java, когато между два класа съществува връзка „Е-А“, ние използваме Наследяване. Класът родител се нарича супер клас, а наследеният клас се нарича подклас. Ключовата дума extends се използва от подкласа, за да наследи характеристиките на супер класа. Наследяването е важно, тъй като води до повторно използване на кода.

Java Синтаксис на наследяване:

class subClass extends superClass
{
   //methods and fields
}

Видове наследство в Java

Ето различните видове наследство в Java:

  1. Единично наследяване
  2. Множествено наследяване
  3. Наследяване на много нива
  4. Йерархично наследяване
  5. Хибридно наследяване

1. Единично наследяване:

При единично наследяване един клас разширява друг клас (само един клас).

Единично наследяване в Java
Единично наследяване

В горната диаграма клас B разширява само клас A. Клас A е супер клас, а клас B е подклас.

2. Множествено наследяване:

Множественото наследяване е едно от наследствата в Java типове, където един клас разширява повече от един клас. Java не поддържа множествено наследяване.

Множествено наследяване в Java

Java Множествено наследяване

Съгласно горната диаграма, клас C разширява и двата класа A и клас B.

3. Многостепенно наследяване:

При многостепенното наследяване един клас може да наследява от производен клас. Следователно, производният клас става базов клас за новия клас.

Многостепенно наследяване в Java

Наследяване на много нива

Както е показано на диаграмата, клас C е подклас на B, а B е подклас на клас A.

4. Йерархично наследяване:

При йерархичното наследяване един клас се наследява от много подкласове.


Йерархично наследяване в Java

Йерархично наследяване

Съгласно горния пример, клас B, C и D наследяват един и същ клас A.

5. Хибридно наследяване:

Хибридното наследяване е един от видовете наследство в Java което е комбинация от единично и множествено наследяване.


Хибридно наследяване

Хибридно наследяване

Съгласно горния пример, всички публични и защитени членове на клас A се наследяват в клас D, първо чрез клас B и второ чрез клас C.

Забележка: Java не поддържа хибридно/множествено наследяване

Наследство в Java Пример

Ето един пример за наследство в Java:


Пример за Java наследяване

Java Пример за наследяване

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Супер ключова дума

Ключовата дума super е подобна на ключовата дума „тази“. Ключовата дума super може да се използва за достъп до всеки член от данни или методи на родителския клас. Ключовата дума Super може да се използва при променлив, ниво на метод и конструктор.

Синтаксис:

super.<method-name>();

Също така проверете: - тази ключова дума в Java: Какво е и как да се използва с Пример

Научете наследяването в OOP с пример

Помислете за същото банково приложение от предишен пример.

Трябва да отворим два различни типа акаунти, един за спестяване и друг за проверка (известен също като текущ).

Наследяване в ООП

Нека сравним и проучим как можем да подходим към кодирането от a перспектива за структурирано и обектно-ориентирано програмиране.

Структурен подход: В структурното програмиране ще създадем две функции –

  1. Един за теглене
  2. А другият за депозитни действия.

Тъй като работата на тези функции остава същата във всички акаунти.

Наследяване в ООП

Подходът на OOP: Докато използвате ООП програмен подход. Щяхме да създадем два класа.

  • Всеки има изпълнение на функциите за депозит и теглене.
  • Това ще доведе до излишна допълнителна работа.

Наследяване в ООП

Заявка за промяна в софтуера

Сега има промяна в спецификацията на изискванията за нещо, което е толкова често срещано в софтуерната индустрия. Трябва да добавите функционална привилегирована банкова сметка с възможност за овърдрафт. За предистория овърдрафтът е възможност, при която можете да изтеглите сума, по-голяма от наличното салдо по сметката ви.

Заявка за промяна в софтуера

Структурен подход: Използвайки функционален подход, трябва да променя моята функция за изтегляне, която вече е тествана и базирана. И добавянето на метод като по-долу ще се погрижи за новите изисквания.

Заявка за промяна в софтуера

Подходът на OOP: Използвайки подхода на OOP, просто трябва да напишете нов клас с уникална реализация на функцията за изтегляне. Никога не сме докосвали тестваното парче код.

Заявка за промяна в софтуера

Още една заявка за промяна

Ами ако изискването се промени допълнително? Искате да добавите сметка за кредитна карта със собствено уникално изискване за депозити.

Изискване за заявка за множество промени в софтуера

Структурен подход: Използвайки структурния подход, трябва да промените отново тествания код на депозита.

Структурен подход към заявка за множество промени в софтуера

Подходът на OOP: Но използвайки обектно-ориентиран подход, просто ще създадете нов клас с неговата уникална имплементация на метода за депозит (маркиран в червено на изображението по-долу). Така че, въпреки че структурното програмиране изглежда като лесен подход първоначално, ООП печели в дългосрочен план.

Подходът на OOP към заявка за множество промени

Предимства на наследяването в ООП

Но може да се твърди, че във всички класове имате повтарящи се части от код.

За да преодолеете това, създавате родителски клас, кажете „сметка“ и прилагате същата функция за депозит и теглене. И направете дъщерните класове наследен клас „акаунт“. Така че те ще имат достъп до функции за теглене и депозиране в клас акаунт. Не се изисква функциите да се изпълняват индивидуално. Това е Наследяване в java. .

Предимства на наследяването в ООП

Предимства на наследяването в ООП

Въпроси и Отговори

Java избягва множественото наследяване на класове, за да предотврати „диамантения проблем“, при който компилаторът не може да реши кой наследен метод да използва. Вместо това, Java позволява на класа да имплементира множество интерфейси, за да постигне подобна гъвкавост безопасно.

Ключовата дума this се отнася до текущия обект и неговите членове, докато super се отнася до непосредствения родителски клас. Използвайте super, за да извикате променливи, методи или конструктор на родител от подклас.

Наследяването моделира връзка „Е-А“, при която подклас разширява родител. Композицията моделира връзка „Има-А“, при която клас съдържа други обекти. Композицията често е по-гъвкава и е предпочитана за слабо свързани дизайни.

Изкуственият интелект може да анализира отговорностите на класовете, да предлага споделени базови класове, да препоръчва интерфейси вместо дълбоко наследяване и да маркира дублиран код, helpping Разработчиците изграждат чисти, многократно използваеми йерархии, които следват принципите на обектно-ориентирания дизайн.

Да. Статичният анализ, подпомаган от изкуствен интелект, може да измери дълбочината на наследяване, да маркира крехки или прекомерно вложени йерархии и да предложи рефакторинг към композиция или интерфейси, за да се подобри поддръжката и да се намали тясното свързване.

Обобщете тази публикация с: