Pembolehubah dan Penyembunyian Kaedah di Jawa

1. Pengenalan

Dalam tutorial ini, kita akan belajar tentang penyembunyian pemboleh ubah dan kaedah dalam bahasa Java .

Pertama, kita akan memahami konsep dan tujuan setiap senario ini. Selepas itu, kami akan menyelidiki kes penggunaan dan mengkaji contoh yang berbeza.

2. Penyembunyian Pembolehubah

Penyembunyian berubah-ubah berlaku apabila kita mengisytiharkan harta tanah dalam skop tempatan yang mempunyai nama yang sama dengan yang sudah kita miliki dalam ruang lingkup luar.

Sebelum melihat contohnya, mari kita rangkum secara ringkas kemungkinan ruang lingkup pemboleh ubah di Java. Kita boleh menentukannya dengan kategori berikut:

  • pemboleh ubah tempatan - dinyatakan dalam sekeping kod seperti kaedah, pembina, di mana-mana blok kod dengan pendakap kerinting
  • pemboleh ubah contoh - didefinisikan di dalam kelas dan tergolong dalam contoh objek
  • pemboleh ubah kelas atau statik - diisytiharkan dalam kelas dengan kata kunci statik . Mereka mempunyai skop tahap kelas.

Sekarang, mari kita jelaskan penyembunyian dengan contoh, untuk setiap kategori pemboleh ubah individu.

2.1. Kekuatan Tempatan

Mari lihat kelas HideVariable :

public class HideVariable { private String message = "this is instance variable"; HideVariable() { String message = "constructor local variable"; System.out.println(message); } public void printLocalVariable() { String message = "method local variable"; System.out.println(message); } public void printInstanceVariable() { String message = "method local variable"; System.out.println(this.message); } }

Di sini kita mempunyai pemboleh ubah mesej yang dinyatakan di 4 tempat yang berbeza. Pemboleh ubah tempatan yang dinyatakan di dalam konstruktor dan dua kaedah membayangi pemboleh ubah contoh.

Mari kita uji inisialisasi objek dan memanggil kaedahnya:

HideVariable variable = new HideVariable(); variable.printLocalVariable(); variable.printInstanceVariable();

Keluaran kod di atas adalah:

constructor local variable method local variable this is instance variable

Di sini, 2 panggilan pertama mengambil pemboleh ubah tempatan.

Untuk mengakses pemboleh ubah contoh dari skop tempatan, kita dapat menggunakan kata kunci ini seperti yang ditunjukkan dalam kaedah printInstanceVariable () .

2.2. Menyembunyikan dan Hierarki

Begitu juga, apabila kedua-dua kelas anak dan ibu bapa mempunyai pemboleh ubah dengan nama yang sama, pemboleh ubah anak menyembunyikan yang dari ibu bapa.

Katakan kita mempunyai kelas induk:

public class ParentVariable { String instanceVariable = "parent variable"; public void printInstanceVariable() { System.out.println(instanceVariable); } }

Selepas itu kami menentukan kelas kanak-kanak:

public class ChildVariable extends ParentVariable { String instanceVariable = "child variable"; public void printInstanceVariable() { System.out.println(instanceVariable); } }

Untuk mengujinya, mari kita mulakan dua contoh. Satu dengan kelas ibu bapa dan yang lain dengan anak, kemudian gunakan kaedah printInstanceVariable () pada masing-masing:

ParentVariable parentVariable = new ParentVariable(); ParentVariable childVariable = new ChildVariable(); parentVariable.printInstanceVariable(); childVariable.printInstanceVariable();

Output menunjukkan harta yang disembunyikan:

parent variable child variable

Dalam kebanyakan kes, kita harus mengelakkan membuat pemboleh ubah dengan nama yang sama baik di kelas ibu bapa dan anak . Sebagai gantinya, kita harus menggunakan pengubah akses yang betul seperti peribadi dan menyediakan kaedah getter / setter untuk tujuan tersebut.

3. Kaedah Menyembunyikan

Kaedah penyembunyian boleh berlaku dalam struktur hierarki di java. Apabila kelas anak mentakrifkan kaedah statik dengan tandatangan yang sama dengan kaedah statik di kelas induk, maka kaedah anak menyembunyikan yang ada di kelas induk. Untuk mengetahui lebih lanjut mengenai kata kunci statik , penulisan ini adalah tempat yang baik untuk memulakan.

Tingkah laku yang sama yang melibatkan kaedah contoh disebut kaedah overriding. Untuk mengetahui lebih lanjut mengenai kaedah mengatasi kaedah keluar panduan kami di sini.

Sekarang, mari kita lihat contoh praktikal ini:

public class BaseMethodClass { public static void printMessage() { System.out.println("base static method"); } }

BaseMethodClass has a single printMessage() static method.

Next, let's create a child class with the same signature as in the base class:

public class ChildMethodClass extends BaseMethodClass { public static void printMessage() { System.out.println("child static method"); } }

Here's how it works:

ChildMethodClass.printMessage();

The output after calling the printMessage() method:

child static method

The ChildMethodClass.printMessage() hides the method in BaseMethodClass.

3.1. Method Hiding vs Overriding

Hiding doesn't work like overriding, because static methods are not polymorphic. Overriding occurs only with instance methods. It supports late binding, so which method will be called is determined at runtime.

On the other hand, method hiding works with static ones. Therefore it's determined at compile time.

4. Conclusion

Dalam artikel ini, kami membahas konsep kaedah dan pemboleh ubah bersembunyi di Jawa . Kami menunjukkan pelbagai senario pemboleh ubah bersembunyi dan membayang. Sorotan penting artikel ini juga membandingkan kaedah penolakan dan penyembunyian.

Seperti biasa, kod lengkap boleh didapati di GitHub.