Rumah Java javaTutorial Bolehkah Kaedah Java Overridden Melemparkan Pengecualian Disemak Lebih Luas Daripada Kaedah Induknya?

Bolehkah Kaedah Java Overridden Melemparkan Pengecualian Disemak Lebih Luas Daripada Kaedah Induknya?

Dec 01, 2024 pm 10:26 PM

Can Overridden Java Methods Throw Broader Checked Exceptions Than Their Parent Methods?

Melontar 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 {
    ...
  }
}
Salin selepas log masuk

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!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

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? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

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

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Mar 07, 2025 pm 06:12 PM

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? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

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

Iceberg: Masa Depan Jadual Data Tasik Iceberg: Masa Depan Jadual Data Tasik Mar 07, 2025 pm 06:31 PM

Iceberg: Masa Depan Jadual Data Tasik

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

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 Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap

Cara berkongsi data antara langkah -langkah dalam timun Cara berkongsi data antara langkah -langkah dalam timun Mar 07, 2025 pm 05:55 PM

Cara berkongsi data antara langkah -langkah dalam timun

See all articles