Rumah >Java >javaTutorial >Menggunakan Rujukan Superclass untuk Objek Subkelas
Pertimbangkan senario di mana kita mencipta kelas bernama Pengguna dan kemudian mencipta subkelas yang memanjangkan Pengguna dipanggil Pekerja.
Biasanya, kami mencipta contoh Pengguna dengan:
User user = new User();
Di sini Pengguna ialah jenis pengguna pembolehubah, pengguna ialah pembolehubah yang memegang tika kelas dan Pengguna baharu() mencipta tika Pengguna baharu.
Ringkasnya, pengguna adalah contoh Pengguna.
Tetapi bagaimana jika kelas super Pengguna perlu menggunakan kaedah yang ditakrifkan dalam subkelasnya Pekerja? Bolehkah ini berlaku?
Jawapan ringkasnya ialah ya, tetapi hanya untuk kaedah yang diganti (kaedah yang wujud dalam kedua-dua superclass dan subclass). Inilah yang membolehkan polimorfisme.
Memandangkan hubungan dalam pewarisan ialah hubungan "is-a", Pekerja ialah-seorang Pengguna. jadi, tiada apa yang menghalang Pengguna daripada memegang rujukan kepada contoh subkelasnya Pekerja, selagi ia adalah jenis yang serasi.
Ini dilakukan seperti berikut:
User user = new Employee();
Sekarang, katakan kelas Pengguna mempunyai dua kaedah:
sementara kelas Pekerja mempunyai kaedah tambahan yang dipanggil getEmployeeInformation() dan mengatasi kaedah getUserSalary().
Kemudian dengan Pengguna pengguna = new Employee();:
user.getUserName() akan berfungsi, seperti yang ditakrifkan dalam kelas Pengguna.
user.getUserSalary() juga akan berfungsi, tetapi outputnya adalah daripada kaedah getUserSalary() yang diganti dalam kelas Pekerja, bukan daripada kelas User . Ini adalah intipati polimorfisme.
user.getEmployeeInformation() tidak akan berfungsi. Ia akan menimbulkan ralat kompilasi kerana ia khusus untuk kelas Pekerja.
Ralat kompilasi berlaku apabila pengkompil menemui isu seperti ralat sintaks, jenis tidak sepadan atau pelanggaran lain yang menghalang penyusunan kod berjaya.
Jika kita cuba melakukan sebaliknya dan merujuk objek subkelas Pekerja dengan rujukan kelas super Pengguna, ia tidak akan berfungsi tanpa penghantaran manual! Ini memerlukan penghantaran yang jelas, kerana Pengguna tidak semestinya Pekerja.
Setelah menerangkan perkara ini dengan cara yang mudah, dengan contoh yang mudah, mari fokus pada istilah.
"Rujukan superclass kepada objek subkelas" biasanya dipanggil upcasting. Ringkasnya, upcasting ialah menaip objek kanak-kanak kepada objek induk, dan ia berlaku secara tersirat (bermaksud pengkompil mengendalikannya secara automatik, jadi kami tidak memerlukan sebarang sintaks penghantaran khusus). Ia seperti ketika kita melakukan User user = new Employee();.
Bagaimana pula dengan Downcasting?
Menurun adalah bertentangan dengan menaik.
Ingat apabila kami mengatakan bahawa membuat rujukan Pekerja daripada tika Pengguna adalah tidak sah? Ini dipanggil downcasting dan ia mesti dilakukan secara eksplisit menggunakan sintaks penghantaran. Walaupun upcasting sangat selamat, downcasting menyebabkan risiko. Ini tidak bermakna ia tidak berguna, tetapi ia mesti digunakan dengan berhati-hati.
Saya tidak akan menerangkan secara terperinci tentang downcasting kerana artikel ini tertumpu pada upcasting, tetapi perkara utama ialah menunjukkan perbezaan utama antara downcasting dan upcasting.
Dan itu pembalut! :)
Atas ialah kandungan terperinci Menggunakan Rujukan Superclass untuk Objek Subkelas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!