"Hello, Amigo! Kami akhirnya mencapai sesuatu yang benar-benar menarik. Hari ini saya akan memberitahu anda tentang warisan berbilang . Warisan berbilang sememangnya alat yang sangat menarik dan berkuasa. Dan jika bukan kerana beberapa masalah, maka Java akan menyokong berbilang warisan kelas. Tetapi tidak, jadi kita mesti berpuas hati dengan pelbagai warisan antara muka . Yang juga cukup hebat."

Mewarisi berbilang antara muka - 1

Bayangkan anda sedang menulis permainan komputer. Dan wataknya (objek anda) mesti berkelakuan dengan cara yang sangat kompleks: berjalan di peta, mengumpul item, melakukan pencarian, berkomunikasi dengan watak lain, membunuh seseorang, menyelamatkan orang lain. Katakan anda telah dapat membahagikan semua objek kepada 20 kategori. Ini bermakna, jika anda bernasib baik, anda akan dapat bertahan dengan hanya 20 kelas untuk menentukan objek anda. Tetapi inilah tangkapannya: berapa banyak bentuk interaksi unik yang akan dimiliki oleh objek ini? Setiap jenis objek boleh mempunyai interaksi unik dengan 20 jenis objek lain (kami juga mengira interaksi dengan objek dari jenis yang sama). Dalam erti kata lain, anda perlu menulis kod untuk 20 x 20 = 400 interaksi! Dan jika bilangan jenis objek unik bukan 20, tetapi 100, maka bilangan interaksi boleh menjadi 10,000!

"Wah! Sekarang saya faham mengapa pengaturcaraan adalah kerja yang sukar."

"Ia mudah. ​​Terima kasih kepada banyak abstraksi. Dan dengan tidak sedikit terima kasih kepada pelbagai warisan antara muka."

Kita selalunya boleh memudahkan interaksi objek jika peranan dan/atau kebolehan berinteraksi dan bukannya objek itu sendiri. Dan seperti yang kita sedia maklum, kebolehan boleh ditambah dengan mudah pada kelas apabila ia melaksanakan beberapa antara muka.

Apabila menulis program yang besar, pembangun biasanya melakukan ini dari awal lagi:

1) Kenal pasti semua kebolehan/peranan.

2) Tentukan interaksi antara peranan ini.

3) Kemudian berikan peranan kepada semua kelas.

"Mungkin satu contoh?"

"Sudah tentu. Mari kita lihat peranan dalam kartun «Tom and Jerry».

kod Java Penerangan
interface Moveable
{}
- Peranan / keupayaan untuk bergerak.
interface Eatable
{}
— Peranan/kemampuan untuk dimakan.
interface Eat
{}
— Peranan/kemampuan untuk memakan seseorang.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom ialah kucing yang mempunyai tiga peranan:
1) Dia boleh bergerak
2) Dia boleh memakan seseorang
3) Dia boleh dimakan oleh seseorang (anjing)
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry ialah seekor tikus yang mempunyai dua peranan:
1) Dia boleh bergerak
2) Dia boleh dimakan oleh seseorang
class Killer extends Dog implements Moveable, Eat
{}
Pembunuh ialah seekor anjing dengan dua peranan: 1) Dia boleh bergerak 2) Dia boleh memakan seseorang

Mengetahui hanya tiga peranan ini (antara muka), anda boleh menulis program dan menerangkan interaksi yang betul antara peranan ini. Sebagai contoh, objek akan mengejar (melalui antara muka Boleh Alih) selepas «yang boleh anda makan» dan lari daripada «orang yang boleh makan anda». Dan semua ini tanpa mengetahui tentang objek tertentu. Jika anda menambah lebih banyak objek (kelas) pada program dan mengekalkan peranan ini, ia akan tetap berfungsi dengan baik, mengawal tingkah laku objek anda.