Apa itu multiple inheritance di Java?

Para pengembang mendesain Java dari awal menjadi bahasa pemrograman yang lengkap dan berorientasi objek.

OOP dan warisan

Penggunaan pemrograman berorientasi objek menggunakan konsep warisan untuk memperluas fungsionalitas objek. Pikirkan saat programmer membuat objek. Kemudian Anda dapat melihat bahwa Anda perlu membuat objek yang sangat mirip dengan hanya sedikit perbedaan (mungkin memperluas fungsi objek sebelumnya dalam konteks baru). Di sinilah warisan muncul. Objek yang programmer "berasal" dari objek "basis" lain mewarisi metode dan variabel kelas, dan kemudian dapat menambahkan lebih banyak fungsi (seperti dalam contoh Java berikut):

Sphere kelas publik {int publik radius; }

Bola kelas publik memperluas Sphere {public string color; // Bola menambahkan variabel "warna", tetapi juga menggunakan variabel "radius"}

Peninggalan ganda

Pada titik tertentu, seorang programmer mungkin tergoda untuk menurunkan satu kelas dari beberapa kelas. Ini dikenal sebagai "multiple inheritance" dan meskipun tampaknya berguna, itu dapat menyebabkan masalah, seperti "masalah berlian" yang penting. Masalah ini terjadi ketika dua kelas mewarisi dari kelas yang sama (seperti kelas B dan C berasal dari kelas A), sementara kelas lain (D) berasal dari B dan C. Ketika sebuah objek D dibuat, sistem memperlakukannya sebagai sejenis kelas dasar (kelas "Bola" atau bola dan "Sphere" atau bola, misalnya). Dalam masalah berlian, sistem tidak dapat menentukan secara pasti kelas D (apakah tipe ABD atau tipe ACD?) Adalah salah satu yang menyebabkan masalah.

Java dan multiple inheritance

Karena masalah dengan multiple inheritance, Java tidak mengizinkannya. Namun dalam kenyataannya kelas yang berasal dari beberapa kelas dasar dapat dicapai dengan cara aman menggunakan "antarmuka". Antarmuka mirip dengan kelas, tetapi tidak hanya mendefinisikan struktur kelas, tetapi juga kode aslinya. Kelas dasar yang mengimplementasikan antarmuka tidak selalu "mewarisi" fungsionalitas antarmuka: ia hanya menjanjikan penggunaan strukturnya. Karena kelas yang mengimplementasikan antarmuka tidak mewarisi dari kelas lain (dan bukan jenis kelas dasar), seorang programmer dapat mengimplementasikan beberapa antarmuka menggunakan kelas yang sama.

Contoh: pewarisan dan antarmuka

Contoh berikut menunjukkan perbedaan antara pewarisan objek dan antarmuka. Sebuah kelas yang mewarisi dari yang lain mendapat akses ke kelas dasar karena pada dasarnya menjadi jenis kelas itu (seperti dalam kelas "Bola" dan "Sphere"). Kelas yang mengimplementasikan antarmuka hanya menjanjikan untuk mengimplementasikan struktur antarmukanya: ini bukan jenis antarmuka itu:

antarmuka Basic {int doubleA (); // note: tidak ada kode nyata yang didefinisikan di antarmuka}

public class B mengimplementasikan Basic {

int publik;

public int doubleA () // class B harus menetapkan metode "doubleA ()" untuk mengimplementasikan "Basic" {return a * 2;}}