Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ketika Anda menentukan kelas yang mewarisi dari kelas dasar, Anda terkadang ingin menentukan ulang satu atau beberapa elemen kelas dasar di kelas turunan. Bayangan dan pengesampingan keduanya tersedia untuk tujuan ini.
Perbandingan
Bayangan dan penimpaan keduanya digunakan ketika kelas turunan mewarisi dari kelas dasar, dan keduanya mendefinisikan ulang satu elemen yang dideklarasikan dengan elemen lain. Tetapi ada perbedaan signifikan antara keduanya.
Tabel berikut membandingkan bayangan dengan pengesampingan.
| Titik perbandingan | Bayangan | Pengambil alihan |
|---|---|---|
| Tujuan | Melindungi dari modifikasi kelas dasar berikutnya yang memperkenalkan anggota yang telah Anda tentukan di kelas turunan Anda | Mencapai polimorfisme dengan menentukan implementasi prosedur atau properti yang berbeda dengan urutan panggilanyang sama 1 |
| Elemen yang ditentukan ulang | Jenis elemen apa pun yang dinyatakan | Hanya prosedur (Function, Sub, atau Operator) atau properti |
| Elemen pendefinisan ulang | Jenis elemen apa pun yang dinyatakan | Hanya prosedur atau properti dengan urutan panggilanidentik 1 |
| Tingkat akses elemen pendefinisan ulang | Tingkat akses apa pun | Tidak dapat mengubah tingkat akses elemen yang di-override |
| Keterbacaan dan writabilitas elemen pendefinisian ulang | Kombinasi apa pun | Tidak dapat mengubah kemampuan membaca atau kemampuan menulis properti yang diganti |
| Kontrol atas pendefinisan ulang | Elemen kelas dasar tidak dapat memberlakukan atau melarang bayangan | Elemen kelas dasar dapat menentukan MustOverride, NotOverridable, atau Overridable |
| Penggunaan kata kunci |
Shadows disarankan untuk kelas turunan; Shadows diasumsikan jika Shadows dan Overrides tidak ditentukan2 |
Overridable atau MustOverride diperlukan di kelas dasar; Overrides diperlukan di kelas turunan |
| Warisan elemen pendefinisian ulang berdasarkan kelas yang berasal dari kelas turunan Anda | Elemen bayangan yang diwarisi oleh kelas turunan lebih lanjut; elemen bayangan masih tersembunyi3 | Menimpa elemen yang diwarisi oleh kelas turunan lebih lanjut; elemen yang sudah ditimpa tetap ditimpa |
1 Urutan panggilan terdiri dari jenis elemen (Function, , Sub, Operatoratau Property), nama, daftar parameter, dan jenis pengembalian. Anda tidak dapat mengambil alih prosedur dengan properti, atau sebaliknya. Anda tidak dapat mengambil alih satu jenis prosedur (Function, Sub, atau Operator) dengan jenis lain.
2 Jika Anda tidak menentukan atau ShadowsOverrides, pengkompilasi mengeluarkan pesan peringatan untuk membantu Anda memastikan jenis pendefinisian ulang mana yang ingin Anda gunakan. Jika Anda mengabaikan peringatan, mekanisme bayangan digunakan.
3 Jika elemen bayangan tidak dapat diakses di kelas turunan lebih lanjut, bayangan tidak diwariskan. Misalnya, jika Anda mendeklarasikan elemen bayangan sebagai Private, kelas yang berasal dari kelas turunan Anda mewarisi elemen asli alih-alih elemen bayangan.
Panduan
Anda biasanya menggunakan metode overriding dalam kasus berikut:
Anda mendefinisikan kelas turunan polimorfik.
Anda menginginkan jaminan keamanan dengan kompilator memastikan jenis elemen dan urutan panggilan identik.
Anda biasanya menggunakan bayangan dalam kasus berikut:
Anda memperkirakan bahwa kelas dasar Anda mungkin dimodifikasi dan mendefinisikan elemen menggunakan nama yang sama dengan Anda.
Anda ingin kebebasan mengubah jenis elemen atau urutan panggilan.