Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Antara Muka Kanak-kanak Mengatasi Parameter Kaedah Antara Muka dengan Jenis Yang Lebih Khusus?

Bolehkah Antara Muka Kanak-kanak Mengatasi Parameter Kaedah Antara Muka dengan Jenis Yang Lebih Khusus?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 10:45:03851semak imbas

Can Child Interfaces Override Interface Method Parameters with More Specific Types?

Mengatasi Parameter Kaedah Antara Muka dengan Antara Muka Kanak-kanak

Dalam kod PHP yang diberikan, percubaan dibuat untuk mengatasi kaedah setEngine antara muka Kereta dengan jenis parameter yang lebih khusus dalam antara muka kanak-kanak WaterCar. Walau bagaimanapun, ini mengakibatkan ralat maut:

<code class="php">Fatal error: Declaration of WaterCar::setEngine() must be compatible with Car::setEngine(Engine $engine)</code>

Penjelasan Ralat

Ralat berpunca daripada pelanggaran prinsip penggantian Liskov (LSP), yang menyatakan bahawa subjenis mesti boleh digantikan untuk superjenisnya. Dalam kes ini, antara muka WaterCar ialah subjenis antara muka Kereta, tetapi kaedah setEngine dalam WaterCar mempunyai jenis parameter yang berbeza (HydroEngine) daripada kaedah yang sepadan dalam Kereta (Enjin).

Ini menimbulkan isu keserasian . Kelas yang melaksanakan antara muka WaterCar mungkin tidak boleh dihantar sebagai hujah kepada fungsi yang mengharapkan objek Kereta, kerana kaedah setEngine tidak akan menerima parameter Enjin. Oleh itu, subkelas tidak memenuhi semua keperluan superclass, melanggar LSP.

Resolusi

Untuk menyelesaikan isu ini, kaedah setEngine dalam antara muka WaterCar harus mengekalkan keserasian dengan kaedah dalam antara muka Kereta. Ini bermakna mengekalkan jenis parameter yang sama (Enjin) atau menyediakan jenis yang lebih umum yang merangkumi Enjin, seperti Kenderaan.

<code class="php">interface WaterCar extends Car {

    function setEngine(Vehicle $engine);
}</code>

Dengan perubahan ini, mana-mana kelas yang melaksanakan WaterCar masih boleh digunakan di tempat di mana Kereta dijangka, kerana ia kini menerima parameter jenis yang sama atau lebih umum.

Atas ialah kandungan terperinci Bolehkah Antara Muka Kanak-kanak Mengatasi Parameter Kaedah Antara Muka dengan Jenis Yang Lebih Khusus?. 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