Rumah  >  Artikel  >  Java  >  Pembolehubah dalam Java tidak mengikut polimorfisme dan mengatasi

Pembolehubah dalam Java tidak mengikut polimorfisme dan mengatasi

王林
王林ke hadapan
2023-09-09 18:13:021143semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam

Artikel berkaitan

Lihat lagi