Rumah >Java >javaTutorial >Bolehkah Kaedah Java Overridden Mempunyai Jenis Pulangan Kovarian, dan Apakah Sekatan terhadap Pengendalian Pengecualian?

Bolehkah Kaedah Java Overridden Mempunyai Jenis Pulangan Kovarian, dan Apakah Sekatan terhadap Pengendalian Pengecualian?

Barbara Streisand
Barbara Streisandasal
2024-12-02 13:42:15364semak imbas

Can Java Overridden Methods Have Covariant Return Types, and What Are the Restrictions on Exception Handling?

Jenis Pulangan Kovarian dalam Java

Di Jawa, jenis pemulangan kaedah yang diganti boleh menjadi kovarian, bermakna ia boleh mengembalikan lebih banyak terbitan jenis daripada kaedah yang diganti. Walau bagaimanapun, peraturan ini tidak terpakai kepada pengecualian yang dilemparkan oleh kaedah yang ditindih.

Sekatan Lemparan Pengecualian dalam Kaedah Penggantian

Pengkompil menguatkuasakan sekatan berikut pada kaedah yang ditindih berkenaan pengecualian pengendalian:

  • Kaedah yang diganti tidak boleh membuang tanda baru atau lebih luas pengecualian daripada yang diisytiharkan oleh kaedah yang ditindih.
  • Kaedah yang ditindih boleh membuang pengecualian yang lebih sempit atau tidak ditanda baharu.

Penjelasan

Sekatan ini memastikan bahawa subkelas tidak boleh memperkenalkan pengecualian diperiksa baharu atau lebih teruk kepada antara muka kaedah yang diganti. Ini diperlukan untuk polimorfisme, kerana ia membenarkan kod yang ditulis terhadap superclass untuk mengendalikan pengecualian dengan sewajarnya.

Contoh

Pertimbangkan contoh berikut:

class A {
    public void foo() throws FileNotFoundException {
        // ...
    }
}

class B extends A {
    @Override
    public void foo() throws SQLException { // ERROR: broader checked exception
        // ...
    }
}

Dalam contoh ini, kelas A mentakrifkan kaedah foo yang membuang FileNotFoundException. Kelas B, yang melanjutkan A, cuba mengatasi foo dengan mengisytiharkan pengecualian yang disemak yang lebih luas, SQLException. Ini tidak dibenarkan kerana ia melanggar pengecualian sekatan melontar.

Rasional

Pengkompil menguatkuasakan sekatan ini kepada:

  • Kekalkan kontrak: Antara muka kaedah yang diganti tidak boleh diubah suai dengan cara yang merosakkan sedia ada kod yang bergantung padanya.
  • Pastikan penggantian objek: Objek subkelas mesti boleh digantikan untuk objek superclass, dan ini termasuk pengendalian pengecualian dengan sewajarnya.

Atas ialah kandungan terperinci Bolehkah Kaedah Java Overridden Mempunyai Jenis Pulangan Kovarian, dan Apakah Sekatan terhadap Pengendalian Pengecualian?. 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