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

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

DDD
DDDasal
2024-12-23 11:13:091043semak imbas

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!

Kenyataan:
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