Pembolehubah dalam Java tidak mengikut polimorfisme dan mengatasi
Dalam dunia pengaturcaraan berorientasikan objek (OOP), polimorfisme dan penulisan semula ialah konsep utama yang membawa fleksibiliti dan daya hidup kepada bahasa pengaturcaraan. Java, sebagai bahasa OOP yang berkuasa, menyokong sepenuhnya ciri ini. Walau bagaimanapun, adalah penting untuk memahami bahawa ciri-ciri ini digunakan untuk kaedah di Jawa dan bukan untuk pembolehubah. Dalam artikel ini, kita akan meneroka sebab pembolehubah dalam Java tidak mengikut polimorfisme dan mengatasi untuk mendapatkan pemahaman yang lebih mendalam tentang tingkah laku pembolehubah Java.
Polimorfisme dalam Java
Polymorphism ialah perkataan Greek yang bermaksud "banyak bentuk" dan merupakan konsep asas OOP. Ia membenarkan objek daripada jenis yang berbeza untuk dianggap sebagai objek superjenis biasa, membolehkan kod yang lebih fleksibel dan boleh digunakan semula ditulis. Di Jawa, polimorfisme dicapai melalui pewarisan, antara muka dan kaedah mengatasi.
Contoh
Jom lihat contoh
class Animal { void sound() { System.out.println("The animal makes a sound"); } } class Cat extends Animal { @Override void sound() { System.out.println("The cat meows"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Cat(); myAnimal.sound(); } }
Output
The cat meows
Dalam senario ini, myAnimal ialah pembolehubah rujukan Haiwan yang menunjuk ke objek Kucing. Apabila kaedah sound() dipanggil pada myAnimal, versi dalam kelas Cat dipanggil, bukan versi dalam kelas Animal. Ini adalah polimorfisme, di mana kaedah yang akan dipanggil ditentukan oleh jenis objek sebenar, bukan jenis rujukan.
Menulis semula dalam Java
Penggantian kaedah ialah bentuk polimorfisme khusus dalam Java, di mana subkelas menyediakan pelaksanaan khusus bagi kaedah yang ditakrifkan dalam superclassnya. Kaedah dalam subkelas mesti mempunyai nama, jenis pulangan dan parameter yang sama seperti kaedah dalam superclass.
Mengapa pembolehubah tidak mengikut polimorfisme dan mengatasi?
Mengapa pembolehubah tidak mengikut polimorfisme dan mengatasi? Tidak seperti kaedah, pembolehubah dalam Java tidak mengikut konsep polimorfisme dan overriding. Perbezaan ini berpunca daripada perbezaan asas dalam cara kaedah dan pembolehubah wujud dan beroperasi dalam objek
Di Java, pembolehubah contoh tergolong dalam contoh kelas, yang bermaksud setiap tika mempunyai salinan pembolehubah contoh sendiri. Oleh itu, menukar nilai pembolehubah contoh dalam satu objek tidak menjejaskan objek lain dalam kelas yang sama.
Kaedah, sebaliknya, tergolong dalam kelas itu sendiri dan bukan kepada mana-mana contoh tertentu. Ini bermakna kaedah, tidak seperti pembolehubah, tidak mempunyai salinan berasingan untuk setiap objek kelas.
Contoh
Mari kita pergi ke contoh sebelumnya, tetapi kali ini tambahkan pembolehubah contoh:
class Animal { String sound = "The animal makes a sound"; void makeSound() { System.out.println(sound); } } class Cat extends Animal { String sound = "The cat meows"; @Override void makeSound() { System.out.println(sound); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Cat(); myAnimal.makeSound(); System.out.println(myAnimal.sound); } }
Output
The cat meows The animal makes a sound
Dalam kod ini, myAnimal ialah rujukan Haiwan yang menunjuk ke objek Kucing. Panggilan kaedah makeSound() pada myAnimal akan mencetak "The cat meows", tetapi baris System.out.println(myAnimal.sound) akan mencetak "The Animalmakes a sound". Mengapa ini berlaku? Memandangkan kaedah mengikuti polimorfisme, kaedah makeSound() dalam kelas Cat dilaksanakan. Walau bagaimanapun, oleh kerana pembolehubah tidak mengikut polimorfisme, "pembolehubah bunyi" daripada kelas Haiwan digunakan
Tingkah laku ini disebabkan oleh prinsip penyembunyian yang berubah-ubah. Jika pembolehubah dalam subkelas mempunyai nama yang sama dengan pembolehubah dalam kelas supernya, pembolehubah subkelas menyembunyikan pembolehubah kelas super
Ini tidak bermakna pembolehubah kelas super telah ditindih. Kedua-dua pembolehubah masih wujud secara bebas, dan pembolehubah yang digunakan ditentukan oleh jenis rujukan, bukan jenis objek sebenar. Itulah sebabnya apabila kita mengakses pembolehubah bunyi melalui rujukan Haiwan, kita mendapat nilai bunyi daripada kelas Haiwan dan bukannya kelas Kucing.
Penutup pembolehubah dan persembunyian berubah
Di Java, pembolehubah tidak dipengaruhi oleh kaedah seperti mengatasi. Sebaliknya, mereka mengikuti prinsip penyembunyian berubah-ubah. Terdapat perbezaan asas antara penyembunyian pembolehubah dan kaedah mengatasi:
Method Overriding - Dalam overriding, subkelas menyediakan pelaksanaan berbeza bagi kaedah yang telah ditakrifkan dalam superclassnya. Keputusan kaedah untuk memanggil adalah berdasarkan jenis objek sebenar, dan bukannya jenis rujukan, yang membolehkan polimorfisme.
Variable Hiding - Dalam penyembunyian pembolehubah, jika pembolehubah dalam subkelas mempunyai nama yang sama dengan pembolehubah dalam superclassnya, pembolehubah subclass akan menyembunyikan pembolehubah superclass. Keputusan pembolehubah yang hendak digunakan adalah berdasarkan jenis rujukan, bukan jenis objek sebenar.
Prinsip ini berpunca daripada fakta bahawa kaedah mewakili tingkah laku, manakala pembolehubah mewakili keadaan. Tingkah laku boleh menjadi polimorfik dan ditindih, membenarkan jenis objek yang berbeza mempunyai kelakuan yang berbeza. Sebaliknya, keadaan yang diwakili oleh pembolehubah tergolong dalam contoh tertentu dan bukan polimorfik.
Kesimpulan
Ringkasnya, memahami sebab pembolehubah dalam Java tidak mengikut polimorfisme dan mengatasi boleh memberikan cerapan penting tentang cara Java berfungsi. Pengetahuan ini penting untuk pengaturcara Java untuk mengelakkan salah faham dan ralat apabila menggunakan warisan dan polimorfisme
Atas ialah kandungan terperinci Pembolehubah dalam Java tidak mengikut polimorfisme dan mengatasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.
