Эта статья поможет вам реализовать концепцию, которую в противном случае невозможно реализовать в Java. Я имею в виду Множественное наследование в Java. В этой статье будут затронуты следующие моменты
Множественное наследование
Множественное наследование особенность некоторых объектно-ориентированных языков программирования, в которых класс или объект наследует характеристики и свойства более чем от одного родительского класса или объекта. Это противоречит свойству единого наследования, которое позволяет объекту или классу наследовать от одного конкретного объекта или класса.
// First Parent class class ParentClass1 { void show() { System.out.println("ParentClass1"); } } // Second Parent Class class ParentClass2 { void show() { System.out.println("ParentClass2"); } } class SubClass extends ParentClass1, ParentClass2{ public static void main(String[] args) { SubClass obj = new SubClass(); obj.show(); } }
Выход:
SubClass.java:18: error: '{' expected class SubClass extends ParentClass1, ParentClass2{ ^ 1 error
Java и множественное наследование Объектно-ориентированное программирование предоставляет пользователю функцию множественного наследования, при которой класс может наследовать свойства более чем одного родительского класса. Проще говоря, множественное наследование означает класс, расширяющий более одного класса.
Множественное наследование в java означает, что один класс реализует два или более двух интерфейсов одновременно. Проще говоря, множественное наследование в java означает, что один класс одновременно получает доступ к состояниям и поведению двух или более двух интерфейсов. Множественное наследование показано ниже.
Почему Java не поддерживает множественное наследование? C++, Common lisp и несколько других языков поддерживают множественное наследование, в то время как java его не поддерживает. Java не допускает множественного наследования, чтобы избежать двусмысленности , вызванной этим. Одним из примеров такой проблемы является алмазная проблема , возникающая при множественном наследовании. Есть 2 упомянутые причины, которые дадут вам представление о том, почему у нас нет множественного наследования в java. 1.Алмазная проблема 2.Простота
- В чем проблема с бриллиантами?
Итак, 1-я проблема заключается в двусмысленности проблемы, рассмотрим класс A, в котором есть метод foo (), а затем B и C, производные от A, и имеет собственную реализацию foo (), и теперь класс D происходит от B и C с использованием множественного наследования, и если мы будем ссылаться только на foo() компилятор не сможет решить, какой foo () он должен вызывать. Это также называется проблемой алмаза, потому что структура в этом сценарии наследования аналогична алмазу с 4 ребрами, см. Ниже
A foo() / \ / \ B foo() C foo() \ / \ / D foo()
Даже если мы удалим верхнюю головку алмаза класса А и разрешим множественное наследование, мы увидим эту проблему двусмысленности.
На этом изображении класс A имеет метод с именем foo(). Класс B и класс C наследуются от класса A и реализации foo() по-своему. Но когда класс D наследуется от класса B и класса C, это приводит к путанице, которую следует использовать в классе D. Должен ли это быть класс B: foo() или класс C: foo().
- Простота- Множественное наследование не поддерживается Java с использованием классов, обработка сложностей, возникающих из-за множественного наследования, очень сложна. Это создает проблемы во время различных операций, таких как приведение, цепочка конструкторов и т. Д., И главная причина заключается в том, что существует очень мало сценариев, в которых нам действительно нужно множественное наследование, поэтому лучше опустить его, чтобы все было просто и понятно. ## Альтернатива множественному наследованию
Хотя множественное наследование больше не является частью Java, но все же есть способ реализовать то же самое наряду с устранением двусмысленности вышеописанной проблемы. Решение проблемы – это интерфейсы. Единственный способ реализовать множественное наследование – реализовать несколько интерфейсов в классе. В java один класс может реализовывать два или более интерфейсов. Это также не вызывает никакой двусмысленности, поскольку все методы, объявленные в интерфейсах, реализованы в классе.
Примечание: – Интерфейс содержит переменные и методы, подобные классу, но методы в интерфейсе по умолчанию абстрактны, в отличие от класса.
Реализация:
interface Interface1 { public void show(); } interface Interface2 { public void show(); } class SubClass implements Interface1, Interface2 { public void show() { System.out.println("A class can implements more than one interfaces"); } public static void main(String args[]){ SubClass obj = new SubClass(); obj.show(); } }
Выход:
A class can implements more than one interfaces
Пример 1
Это основной пример, с помощью которого мы собираемся реализовать Множественное наследование с использованием == Интерфейсы== . Основной метод реализует оба интерфейса, т.е. интерфейс Один и интерфейс два. Он выполняется без какой-либо двусмысленности.
Код:
interface MyInterface1 { void m(); } interface MyInterface2 { void n(); } /* * Class implements two interfaces and provides implementation to the * methods of both interface. */ public class MyClass implements MyInterface1, MyInterface2{ public static void main(String[] args) { MyClass obj=new MyClass(); obj.m(); obj.n(); } @Override public void m(){ System.out.println("in implementation of MyInterface1's m()"); } @Override public void n(){ System.out.println("in implementation of MyInterface2's n()"); } }
Выход:
in implementation of MyInterface1's m() in implementation of MyInterface2's n()
Пример 2
Это еще один пример, с помощью которого мы собираемся реализовать Множественное наследование в Java, используя == Интерфейсы== .
Код:
interface Writeable { void writes(); } interface Readable { void reads(); } class Student implements Readable,Writable { public void reads() { stem.out.print("Student reads.. "); } public void writes() { System.out.print(" Student writes.."); } public static void main(String args[]) { Student s = new Student(); s.reads(); s.writes(); } }
Выход:
Student reads.. Student writes..
Заключение Таким образом, множественное наследование может быть достигнуто с помощью методов, обсуждаемых в этой статье.
Оригинал: “https://dev.to/kuljeet/multiple-inheritance-in-java-1fmo”