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

⚡ Умное резюме

Наследование в Java Это механизм, при котором один класс получает поля и методы другого класса с помощью ключевого слова extends. Он способствует повторному использованию кода и моделирует отношение «является» между суперклассом и его подклассами.

  • 🧬 Определение наследования: Один класс получает доступ к полям и методам другого класса, используя свойство extends.
  • 👨👩👧 Отношения «есть»: Моделирует иерархию родительского (супер) класса и дочернего (под) класса.
  • 🇧🇷 Пять типов: Одноуровневое, множественное, многоуровневое, иерархическое и гибридное наследование.
  • ???? Java Ограничение: Java не поддерживает множественное или гибридное наследование через классы.
  • 🔑 Суперключевое слово: Осуществляет доступ к переменным, методам и конструкторам родительского класса из подкласса.
  • Преимущество: Использует повторно протестированный код и добавляет новые функции с помощью новых классов, не изменяя существующие.

Наследование в Java

Что такое наследование?

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

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

Java наследование — это механизм, в котором один класс приобретает свойство другого класса. В Java, когда между двумя классами существует связь «Is-A», мы используем наследование. Родительский класс называется суперклассом, а унаследованный класс называется подклассом. Ключевое слово 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 похоже на ключевое слово «this». Ключевое слово super можно использовать для доступа к любому члену данных или методам родительского класса. Ключевое слово super можно использовать в переменная, метод и уровень конструктора.

Синтаксис:

super.<method-name>();

Также проверьте: - это ключевое слово в Java: Что такое и как использовать с примером

Изучите наследование в ООП на примере

Рассмотрим то же банковское приложение из предыдущий пример.

Мы должны открыть два разных типа счетов: один для сохранения, а другой для проверки (также известный как текущий).

Наследование в ООП

Давайте сравним и изучим, как мы можем подойти к кодированию с перспектива структурированного и объектно-ориентированного программирования.

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

  1. Один, чтобы отозвать
  2. А другой для депозитного действия.

Поскольку работа этих функций во всех учетных записях остается одинаковой.

Наследование в ООП

Подход ООП: При использовании ООП программный подход. Мы бы создали два класса.

  • Каждый из них имеет функции пополнения и вывода средств.
  • Это приведет к лишней дополнительной работе.

Наследование в ООП

Запрос на изменение программного обеспечения

Теперь в спецификации требований произошли изменения, связанные с тем, что так распространено в индустрии программного обеспечения. Вы должны добавить функциональность привилегированного банковского счета с возможностью овердрафта. Для справки, овердрафт — это возможность снять сумму, превышающую остаток на вашем счете.

Запрос на изменение программного обеспечения

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

Запрос на изменение программного обеспечения

Подход ООП: Используя подход ООП, вам просто нужно написать новый класс с уникальной реализацией функции вывода. Мы никогда не трогали тестируемый фрагмент кода.

Запрос на изменение программного обеспечения

Еще один запрос на изменение

Что, если требование изменится и дальше? Хотелось бы добавить учетную запись кредитной карты с собственными уникальными требованиями к депозитам..

Множественный запрос на изменение требований к программному обеспечению

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

Структурный подход к множественным запросам на изменение программного обеспечения

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

Подход ООП к множественным запросам на изменение

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

Но можно возразить, что во всех классах есть повторяющиеся фрагменты кода.

Чтобы преодолеть это, вы создаете родительский класс, скажем, «account» и реализуете ту же функцию депозита и снятия. И делаете дочерние классы унаследованными от класса «account». Так что они будут иметь доступ к функциям снятия и внесения в классе account. Функции не обязательно должны быть реализованы по отдельности. Это Наследование в Java. .

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

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

Часто задаваемые вопросы (FAQ)

Java Избегает множественного наследования классов, чтобы предотвратить «проблему ромба», когда компилятор не может решить, какой из наследуемых методов использовать. Вместо этого, Java позволяет классу реализовывать несколько интерфейсов для безопасного достижения аналогичной гибкости.

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

Наследование моделирует отношение «является», где подкласс наследует родительский класс. Композиция моделирует отношение «имеет», где класс содержит другие объекты. Композиция часто более гибкая и предпочтительна для слабо связанных архитектур.

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

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

Подведем итог этой публикации следующим образом: