


Bolehkah Kaedah Java Overridden Melemparkan Pengecualian Disemak Lebih Luas Daripada Kaedah Induknya?
Dec 01, 2024 pm 10:26 PMMelontar Pengecualian dalam Kaedah Ditindih
Di Java, kaedah mengatasi mewarisi pengecualian yang diisytiharkan oleh kaedah induknya. Walau bagaimanapun, terdapat sekatan tertentu pada jenis pengecualian yang boleh dilemparkan dengan kaedah mengatasi.
Secara khusus, kaedah mengatasi tidak boleh membuang pengecualian yang diperiksa yang lebih luas atau baharu berbanding dengan yang diisytiharkan oleh kaedah yang ditindih. Ini bermakna jika kaedah mengisytiharkan untuk membuang pengecualian tertentu, kaedah mengatasi hanya boleh membuang pengecualian itu atau subkelasnya.
Penaakulan
Sekatan ini membantu mengekalkan Liskov Prinsip Penggantian, yang menyatakan bahawa objek subkelas seharusnya dapat menggantikan objek kelas induk tanpa mengganggu tingkah laku program. Jika kaedah yang mengatasi boleh membuang pengecualian yang lebih luas daripada kaedah yang ditindih, ia akan melanggar prinsip ini dan boleh membawa kepada tingkah laku yang tidak dijangka.
Contoh
Pertimbangkan kod berikut:
class A { public void foo() throws IOException { ... } } class B extends A { @Override public void foo() throws SocketException { ... } }
Dalam contoh ini, kaedah foo() dalam kelas A mengisytiharkan untuk membuang IOException. Kaedah utama dalam kelas B membuang SocketException, yang merupakan subkelas IOException. Ini dibenarkan.
Walau bagaimanapun, jika kaedah foo() dalam kelas B membuang SQLException, yang tidak berkaitan dengan IOException, ia tidak akan dibenarkan. Ini akan melanggar peraturan bahawa kaedah overriding tidak boleh membuang pengecualian yang lebih luas daripada kaedah overridden.
Implikasi
Peraturan ini memberi kesan kepada reka bentuk kaedah overridden, kerana ia mengehadkan pengecualian yang boleh dibuang dengan kaedah mengatasi. Pembangun mesti mempertimbangkan dengan teliti pengecualian yang diisytiharkan oleh kaedah yang diganti apabila mengatasinya untuk mengelakkan ralat pengkompil dan pengecualian masa jalan.
Atas ialah kandungan terperinci Bolehkah Kaedah Java Overridden Melemparkan Pengecualian Disemak Lebih Luas Daripada Kaedah Induknya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?

Iceberg: Masa Depan Jadual Data Tasik

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap

Cara berkongsi data antara langkah -langkah dalam timun
