Rumah >Java >javaTutorial >Adakah Pemuatan Lebihan Kaedah Java Pertimbangkan Jenis Parameter Masa Jalan untuk Pemilihan Kaedah?

Adakah Pemuatan Lebihan Kaedah Java Pertimbangkan Jenis Parameter Masa Jalan untuk Pemilihan Kaedah?

DDD
DDDasal
2024-12-15 09:25:10176semak imbas

Does Java Method Overloading Consider Runtime Parameter Types for Method Selection?

Pemuatan Terlebih Kaedah dan Penentuan Jenis Parameter

Dalam Java, lebihan kaedah membenarkan takrifan berbilang kaedah dengan nama yang sama tetapi tandatangan berbeza. Apabila kaedah dipanggil, pelaksanaan khusus yang akan digunakan ditentukan pada masa penyusunan berdasarkan jenis parameter kaedah yang diisytiharkan.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penentuan ini dibuat hanya berdasarkan yang diisytiharkan. jenis, bukan jenis masa jalan sebenar bagi argumen yang dihantar kepada kaedah. Tingkah laku ini berbeza dengan bahasa pengaturcaraan tertentu, di mana jenis masa jalan sebenar dipertimbangkan semasa pemilihan kaedah.

Untuk menggambarkan konsep ini, pertimbangkan kod berikut:

interface Callee {
    public void foo(Object o);
    public void foo(String s);
    public void foo(Integer i);
}

class CalleeImpl implements Callee
    public void foo(Object o) {
        logger.debug("foo(Object o)");
    }

    public void foo(String s) {
        logger.debug("foo(\"" + s + "\")");
    }

    public void foo(Integer i) {
        logger.debug("foo(" + i + ")");
    }
}

Callee callee = new CalleeImpl();

Object i = new Integer(12);
Object s = "foobar";
Object o = new Object();

callee.foo(i);
callee.foo(s);
callee.foo(o);

Dalam contoh ini, walaupun i ialah objek Integer, panggilan ke callee.foo(i) akan menggunakan kaedah foo(Objek o) kerana jenis parameter yang diisytiharkan bagi kaedah itu ialah Objek. Begitu juga, panggilan ke callee.foo(s) dan callee.foo(o) akan menggunakan kaedah foo(String s) dan foo(Objek o) masing-masing.

Pemilihan Kaedah Boleh Pertimbangkan Parameter Sebenar Jenis?

Spesifikasi bahasa Java secara eksplisit menyatakan bahawa proses pemilihan kaedah hanya mempertimbangkan jenis masa kompilasi bagi argumen, bukan jenis masa jalan sebenar mereka. Oleh itu, adalah tidak mungkin untuk mengubah suai kod yang diberikan dalam soalan untuk mencapai tingkah laku yang diingini di mana kaedah digunakan berdasarkan jenis masa jalan sebenar parameter.

Atas ialah kandungan terperinci Adakah Pemuatan Lebihan Kaedah Java Pertimbangkan Jenis Parameter Masa Jalan untuk Pemilihan Kaedah?. 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