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