Javaにおける多重継承


この記事では、Javaで実装することができない概念を実装するのに役立ちます.私はJavaでの多重継承を参照しています.以下の点はこの記事に触れます
多重継承
複数の継承は、クラスまたはオブジェクトが複数の親クラスまたはオブジェクトからの特性とプロパティを継承するオブジェクト指向プログラミング言語の機能です.これは単一の継承プロパティに反しており、オブジェクトまたはクラスが1つの特定のオブジェクトまたはクラスから継承できるようになります.

 // 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と多重継承
オブジェクト指向プログラミングは、複数の継承の機能をユーザに提供します.クラスでは、単一の親クラス以上のプロパティを継承できます.より単純な用語では、多重継承は1つ以上のクラスを拡張するクラスを意味します.
Javaでの多重継承は、2つ以上のインターフェイスを同時に実装する1つのクラスを意味します.単純な語において、Javaの多重継承は、2つ以上のインターフェースの状態と行動に同時にアクセスする1つのクラスを意味します.複数の継承を以下に示します.

Javaが多重継承をサポートしない理由
Java +がサポートしていない間、C +、一般的なLispと他のいくつかの言語は複数の継承をサポートします.Javaは、複数の継承によって引き起こされるあいまいさを避けることができません.そのような問題の一例として、多重継承におけるダイヤモンド問題がある.
Javaで複数の継承をしない理由について説明します.
1 .ダイヤモンド問題
簡単さ
  • ダイヤモンドの問題は何ですか?
  • したがって、1番目はダイアモンドの問題のまわりであいまいさです、そして、クラスAがFoo ()メソッドを考えます、そして、Aから派生して、それ自身のFoo ()実装があります、そして、現在、クラスDは複数の遺産を使用してBとCから派生します.この遺産シナリオの構造が4つの端ダイヤモンドに類似しているので、これはダイヤモンド問題とも呼ばれます
              A foo()
            /      \
          /          \
       B foo()     C foo()
          \          /
            \       /
             D foo()
    
    たとえ私たちがダイアモンドクラスAの上部頭を取り除いて、複数の遺産を許すならば、我々はあいまいさのこの問題を見ます.

    このイメージでは、クラスAにfoo ()というメソッドがあります.
    クラスBとクラスCは、クラスAと== overrides ==を継承します.
    しかし、クラスDがクラスBとクラスCから継承されるとき、これはクラスDで使用する= = overridden ==実装を混乱させます.

  • 簡単
    複数の継承は、Javaを使用してクラスを使用してサポートされません.複数の継承に起因する複雑さを処理するのは非常に複雑です.それはキャスティングのようないろいろな操作の間に問題を引き起こします、そして、コンストラクタ連鎖など、そして、上記のすべての理由は、我々が実際に複数の遺産を必要とするシナリオが非常に少ないということです.
    多重継承
  • への代替
    複数の継承はJavaの一部ではありませんが、まだ上記の問題の曖昧さを解決するのと一緒に実装できます.
    問題の解決策はインタフェースです.
    複数の継承を実装する唯一の方法は、複数のインターフェイスを実装することです.
    Javaでは、1つのクラスで2つ以上のインターフェイスを実装できます.インタフェースで宣言されたすべてのメソッドがクラスで実装されるので、これもどんな曖昧性も引き起こしません.

    注意: -インターフェイスにはクラスのような変数やメソッドが含まれますが、インターフェイスのメソッドはクラスとは異なり抽象的です.

    実装


    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


    これは基本的な例です.メインメソッドはインターフェイス、すなわちinterfaceoneとinterfacetwoの両方を実装します.それはどんなあいまいさもなく実行します.

    コード


    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


    これはもう一つの例です.

    コード


    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..
    
    
    結論
    このように、本記事で議論される方法によって、多重継承を達成できます.