[ HTML ] [ Java ] [ Bahasa C ]


Selasa, Mei 21, 2019

Java dan Multiple Inheritance

Multiple inheritance adalah fitur dari konsep berorientasi objek, dimana sebuah class dapat mewariskan propertinya kepada lebih dari satu parent class. Permasalahan yang terjadi ketika terdapat method dengan signature sama dalam kedua super class dan subclass. Ketika method dipanggil maka compiler tidak dapat menentukan method class mana yang akan dipanggil dan bahkan ketika memanggil method class mana yang harus diproritaskan terlebih dahulu.

Kenapa Java tidak mendukung multiple inheritance?
Perhatikan contoh program Java berikut ini, hasil yang ditampilkan dari contoh program tersebut adalah error.

Output:
Compiler Error

Dari kode program sebelumnya, dapat dilihat bahwa pada saat pemanggilan method fun() menggunakan Test object akan menyebabkan komplikasi akan memanggil Parent1 fun() atau Parent2 fun() method.

satu, Permasalahan Diamond
         GrandParent
           /     \
          /       \
      Parent1      Parent2
          \       /
           \     /
             Test

Dari kode program sebelumnya, dapat dilihat bahwa ketika pemanggilan method fun() menggunakan object Test akan menyebabkan komplikasi memanggil Parent1 fun() atau Child fun() methodKarena itu, untuk menghindari kompilasi, Java tidak mendukung multiple inheritance dari class.

dua, Simplicity - Multiple inheritance tidak didukung oleh Java dengan menggunakan class, dikarenakan multiple inheritance sangat komplek. Hal tersebut akan menciptakan masalah selama operasi seperti casting, constructor berantai, dan lain sebagainya, serta diatas semua alasan tersebut adalah sangat sedikit skenario yang membutuhkan multiple inheritance, sehingga lebih baik untuk menghilangkannya untuk menjaga proses pembuatan program tetap sederha dan mudah.

Bagaimanakah cara meng-handle permasalahan tersebut untuk default method dan interface?

Java versi 8 mendukung method default dimana interface dapat menyediakan implementasi default dari method. Dan sebuah class dapat mengimplementasikan dua atau lebih interface. Dalam kasus penerapan interface yang mengandung method default dengan signature method sama, implementasi class harus tertulis spesifik dimana method default digunakan atau harus overriding method default.

Output:
Default PI1
Default PI2

Jika implementasi dihilangkan dari method default yang berasal dari "TestClass", maka compiler akan error.
Jika terdapat 'diamond' sepanjang interface, maka tidak ada masalah jika tidak ada middle interface menyediakan implementasi interface root. Namun jika menyediakan implementasi, maka implementasi dapat melakukan akses seperti contoh sebelumnya menggunakan keyword super.

Output:
Default GPI





Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D