Apa yang dimaksud dengan tipe pengembalian kovarian di Jawa? Dalam pemrograman berorientasi objek secara umum?
java
oop
covariance
Muncul
sumber
sumber
Jawaban:
Pengembalian kovarian, berarti bahwa ketika seseorang menimpa sebuah metode, tipe kembalian dari metode penggantian diizinkan untuk menjadi subtipe dari tipe kembalian metode yang diganti.
Untuk memperjelas hal ini dengan sebuah contoh, kasus umum adalah
Object.clone()
- yang dideklarasikan untuk mengembalikan tipeObject
. Anda dapat menimpanya di kelas Anda sendiri sebagai berikut:Manfaatnya di sini adalah bahwa metode apa pun yang menyimpan referensi eksplisit ke objek MyFoo akan dapat memanggil
clone()
dan mengetahui (tanpa casting) bahwa nilai yang dikembalikan adalah turunannyaMyFoo
. Tanpa tipe kembalian kovarian, metode yang ditimpa di MyFoo harus dideklarasikan untuk dikembalikanObject
- sehingga kode pemanggil harus secara eksplisit men-downcast hasil dari pemanggilan metode (meskipun kedua belah pihak "tahu" bahwa itu hanya dapat menjadi instance dari MyFoo ).Perhatikan bahwa tidak ada yang istimewa tentang
clone()
dan bahwa metode yang ditimpa dapat memiliki pengembalian kovarian - Saya menggunakannya sebagai contoh di sini karena ini adalah metode standar yang sering kali berguna.sumber
List<Foo>
danList<FooBar>
?clone()
sebagai aMethod<Void, Object>
, dan menanyakan apakah yang lebih spesifikMethod<Void, MyFoo>
dapat ditetapkan ke jenis induk tersebut. Yang mana, jika dan hanya jika metode Java adalah kovarian dalam tipe kembaliannya.Berikut contoh sederhana lainnya:
Animal
kelasDog
kelasIni mungkin untuk mengubah jenis kembalinya
Dog
'sseekFood()
metode untukDogFood
- subclass dariFood
, seperti yang ditunjukkan di bawah ini:Itu sempurna yang utama hukum, dan jenis kembalinya
Dog
'sseekFood()
metode yang dikenal sebagai tipe kembali kovarian .sumber
Dari rilis JDK 1.5, jenis kovarian diperkenalkan di Jawa. dan saya akan menjelaskannya kepada Anda dengan kasus sederhana,: Saat kita mengganti fungsi, fungsi diizinkan untuk membuat perubahan pada perilakunya, itulah yang bisa Anda baca di sebagian besar buku, tetapi yang mereka {penulis} lewatkan adalah bahwa kita juga dapat mengubah tipe pengembalian. periksa tautan di bawah ini untuk klarifikasi kita dapat mengubah tipe pengembalian selama dapat ditugaskan untuk mengembalikan tipe versi dasar metode.
Jadi fitur pengembalian tipe turunan ini disebut COVARIANT ...
Bisakah metode yang diganti berbeda dalam tipe pengembalian?
sumber
tipe Pengembalian kovarian berarti mengembalikan referensi Kelas sendiri atau referensi kelas anaknya.
sumber
Parent.foo()
mengembalikan tipe yang tidak terkaitA
danChild.foo()
mengembalikan tipe yangB
berasalA
.Untuk menambah jawaban di atas, penggantian dimungkinkan di antara tipe kembalian co-varian, dengan batasan bahwa tipe kembalian dari metode penggantian (metode subkelas) harus menjadi subkelas dari tipe kembalian dari metode yang diganti (metode superclass). Ini berlaku mulai dari Java 5 dan seterusnya.
sumber
Jenis kembalian kovarian menentukan bahwa jenis kembalian dapat bervariasi ke arah yang sama seperti subclass
Sebelum Java 5, tidak mungkin mengganti metode apa pun dengan mengubah tipe kembalian. Tapi sekarang, sejak Java5,
dimungkinkan untuk mengganti metode dengan mengubah tipe pengembalian jika subkelas menimpa metode apa pun yang tipe kembaliannya Non-Primitif tetapi mengubah tipe kembaliannya menjadi tipe subkelas.
sumber
Kami memiliki kebebasan untuk memiliki tipe pengembalian yang lebih spesifik saat mengganti
metode.
Bantuan dalam mencegah ClassCastExceptions run-time saat kembali
referensi: www.geeksforgeeks.org
sumber
UnaryOperator.java
Function.java
sumber
Sebelum Java5, tidak mungkin mengganti metode apa pun dengan mengubah tipe kembalian. Tapi sekarang, sejak Java5, dimungkinkan untuk mengganti metode dengan mengubah tipe pengembalian jika subkelas mengganti metode apa pun yang tipe kembaliannya Non-Primitif tetapi mengubah tipe kembaliannya menjadi tipe subkelas.
sumber