Rumah >Java >javaTutorial >Bilakah Kaedah Overriding di Java Mempunyai Jenis Pulangan Berbeza?

Bilakah Kaedah Overriding di Java Mempunyai Jenis Pulangan Berbeza?

Barbara Streisand
Barbara Streisandasal
2024-12-02 19:03:14274semak imbas

When Can Overriding Methods in Java Have Different Return Types?

Jenis Pulangan Kovarian dalam Kaedah Overriding

Kaedah overriding dalam Java boleh berbeza dalam jenis pulangannya, dengan syarat syarat tertentu dipenuhi. Khususnya, Java menyokong jenis pulangan kovarian, membenarkan kaedah mengatasi mempunyai jenis pulangan yang lebih spesifik daripada kaedah yang ditindihnya.

Menurut bahagian Spesifikasi Bahasa Java (JLS) 8.4.5, ini dibenarkan selagi kerana peraturan berikut dipatuhi:

  • Jika kaedah asal mengembalikan batal, kaedah mengatasi mesti juga kembali batal.
  • Jika kaedah asal mengembalikan jenis primitif, kaedah mengatasi mesti mengembalikan jenis primitif yang sama.
  • Jika kaedah asal mengembalikan jenis rujukan:

    • Jenis pemulangan kaedah mengatasi mestilah subjenis pemulangan kaedah asal taip.
    • Sebagai alternatif, jenis pemulangan kaedah mengatasi boleh terhasil daripada penukaran yang tidak ditandai bagi jenis pemulangan kaedah asal, atau
    • Jenis pemulangan kaedah mengatasi boleh menjadi pemadaman jenis pemulangan kaedah asal ( selepas parameter jenis generik dialih keluar).

Sebagai contoh, pertimbangkan kod berikut:

class ShapeBuilder {
    ...
    public Shape build() {
        ....
    }
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
        ....
    }
}

Dalam contoh ini, kaedah bina() dalam CircleBuilder mengatasi kaedah bina() dalam ShapeBuilder. Jenis pengembalian kaedah yang ditindih ialah Bentuk, manakala jenis pengembalian kaedah yang ditindih ialah Bulatan, yang merupakan subjenis Bentuk. Ini dibenarkan oleh peraturan jenis pulangan kovarian Java.

Atas ialah kandungan terperinci Bilakah Kaedah Overriding di Java Mempunyai Jenis Pulangan Berbeza?. 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