"Halo, Amigo! Kita akhirnya sampai pada sesuatu yang sangat menarik. Hari ini saya akan memberi tahu Anda tentang warisan berganda . Warisan berganda memang alat yang sangat menarik dan kuat. Dan jika bukan karena beberapa masalah, maka Java akan mendukung banyak pewarisan kelas. Tapi ternyata tidak, jadi kita harus puas dengan banyak pewarisan antarmuka . Yang juga cukup mengagumkan."

Mewarisi banyak antarmuka - 1

Bayangkan Anda sedang menulis permainan komputer. Dan karakternya (objek Anda) harus berperilaku dengan cara yang sangat kompleks: berjalan di sekitar peta, mengumpulkan item, melakukan misi, berkomunikasi dengan karakter lain, membunuh seseorang, menyelamatkan orang lain. Katakanlah Anda dapat membagi semua objek menjadi 20 kategori. Ini berarti, jika Anda beruntung, Anda dapat melakukannya hanya dengan 20 kelas untuk mendefinisikan objek Anda. Tapi inilah intinya: berapa banyak bentuk interaksi unik yang akan dimiliki objek-objek ini? Setiap tipe objek dapat memiliki interaksi unik dengan 20 tipe objek lainnya (kami juga menghitung interaksi dengan objek dengan tipe yang sama). Dengan kata lain, Anda harus menulis kode untuk 20 x 20 = 400 interaksi! Dan jika jumlah tipe objek unik bukan 20, tapi 100, maka jumlah interaksinya bisa jadi 10.000!

"Wah! Sekarang saya mengerti mengapa pemrograman adalah pekerjaan yang sulit."

"Sederhana. Terima kasih banyak abstraksi. Dan tidak sedikit terima kasih banyak pewarisan antarmuka."

Kita sering dapat menyederhanakan interaksi objek jika peran dan/atau kemampuan berinteraksi daripada objek itu sendiri. Dan seperti yang telah kita ketahui, kemampuan dapat dengan mudah ditambahkan ke kelas saat mengimplementasikan beberapa antarmuka.

Saat menulis program besar, pengembang biasanya melakukan ini sejak awal:

1) Identifikasi semua kemampuan/peran.

2) Tentukan interaksi antara peran-peran ini.

3) Kemudian cukup tetapkan peran untuk semua kelas.

"Mungkin contohnya?"

"Tentu saja. Mari kita lihat peran dalam kartun «Tom and Jerry»."

kode jawa Keterangan
interface Moveable
{}
— Peran/kemampuan bergerak.
interface Eatable
{}
— Peran/kemampuan untuk dimakan.
interface Eat
{}
— Peran/kemampuan memakan seseorang.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom adalah kucing yang memiliki tiga peran:
1) Dia bisa bergerak
2) Dia bisa memakan seseorang
3) Dia bisa dimakan oleh seseorang (anjing)
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry adalah seekor tikus yang memiliki dua peran:
1) Dia bisa bergerak
2) Dia bisa dimakan oleh seseorang
class Killer extends Dog implements Moveable, Eat
{}
Killer adalah seekor anjing dengan dua peran: 1) Dia bisa bergerak 2) Dia bisa memakan seseorang

Mengetahui hanya tiga peran (antarmuka) ini, Anda dapat menulis sebuah program dan menjelaskan interaksi yang benar antara peran-peran ini. Misalnya, sebuah objek akan mengejar (melalui antarmuka Bergerak) setelah «yang bisa kamu makan» dan lari dari «yang bisa memakanmu». Dan semua ini tanpa mengetahui tentang objek tertentu. Jika Anda menambahkan lebih banyak objek (kelas) ke program dan mempertahankan peran ini, itu akan tetap berfungsi dengan baik, mengontrol perilaku objek Anda.