Rumah > Java > javaTutorial > Mengapakah `super.super.method();` Tidak Dibenarkan dalam Java?

Mengapakah `super.super.method();` Tidak Dibenarkan dalam Java?

DDD
Lepaskan: 2024-12-23 11:13:09
asal
1007 orang telah melayarinya

Why is `super.super.method();` Not Allowed in Java?

Mengapa super.super.method(); Dilarang di Jawa?

Penggunaan super.super.method(); di Jawa adalah dilarang kerana kebimbangan enkapsulasi. Enkapsulasi bertujuan untuk menghalang kelakuan kelas induk.

Walaupun kadangkala munasabah untuk memintas kelakuan kelas sendiri (dalam kaedah yang sama), adalah penting untuk tidak memintas kelakuan ibu bapa. Pertimbangkan hierarki kelas berikut:

  • Koleksi: Kelas asas untuk mana-mana koleksi item
  • RedCollection: Subkelas mewakili koleksi item merah
  • BigRedCollection: Subkelas RedCollection yang mewakili koleksi barangan merah besar

Ia logik untuk mentakrifkan kaedah berikut:

  • Collection#add(Item): Menambah item pada koleksi.
  • RedCollection#add(Item): Kaedah overridden yang memastikan item yang ditambah adalah merah.
  • BigRedCollection#add(Item): Kaedah ganti yang memastikan item yang ditambah adalah besar dan merah.

Ini memastikan bahawa subkelas mematuhi kekangan yang dikenakan oleh kelas induk mereka.

Walau bagaimanapun, jika super.super.add() dibenarkan, subkelas NaughtyCollection yang berniat jahat boleh memintas item merah RedCollection keperluan:

  • NaughtyCollection#add(Item): Tidak menghiraukan keperluan item merah, menambah sebarang item.

Ini akan memecahkan invarian yang ditubuhkan oleh RedCollection, mewujudkan koleksi item yang mungkin tidak berwarna merah.

Oleh itu, panggilan super.super.method() adalah dilarang dalam Java untuk mengekalkan enkapsulasi dan menguatkuasakan gelagat kelas.

Atas ialah kandungan terperinci Mengapakah `super.super.method();` Tidak Dibenarkan dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan