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?

Susan Sarandon
Susan Sarandonasal
2024-12-01 22:26:12227semak imbas

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 {
    ...
  }
}

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