Рубрики
Без рубрики

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

Эта статья поможет вам реализовать концепцию, которую в противном случае невозможно реализовать в Java. I… Помеченный как java, наследование, программирование.

Эта статья поможет вам реализовать концепцию, которую в противном случае невозможно реализовать в 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”