Rumah >Java >javaTutorial >Mengapa Kaedah Java Overloading Mengabaikan Jenis Parameter Masa Jalan?

Mengapa Kaedah Java Overloading Mengabaikan Jenis Parameter Masa Jalan?

Barbara Streisand
Barbara Streisandasal
2024-12-20 10:25:14340semak imbas

Why Does Java's Method Overloading Ignore Runtime Parameter Types?

Pemilihan Kaedah Terlebih Beban: Memahami Peranan Jenis Parameter Sebenar

Mekanisme penghantaran kaedah dinamik Java mempunyai nuansa yang boleh diabaikan dengan mudah. Artikel ini meneroka salah faham khusus mengenai pengaruh jenis parameter sebenar pada pemilihan kaedah.

Isunya:

Dalam kod yang disediakan, antara muka Callee mentakrifkan tiga kaedah terlebih beban foo. Jangkaan ialah apabila menggunakan foo dengan "Integer i" sebenar, kaedah foo(Integer i) akan dipilih. Walau bagaimanapun, tingkah laku yang diperhatikan ialah foo(Objek o) sentiasa dilaksanakan, tanpa mengira jenis parameter sebenar.

Penjelasan:

Bertentangan dengan jangkaan, kaedah Java proses pemilihan hanya mempertimbangkan jenis masa kompilasi argumen. Ini bermakna lebihan muatan berdasarkan jenis parameter sebenar, konsep yang dikenali sebagai "semakan jenis masa jalan," tidak disokong dalam Java.

Perkataan Rasmi:

The Spesifikasi Bahasa Java dengan jelas menyatakan:

When a method is invoked, the number of actual arguments (and any explicit type arguments) and **the compile-time types of the arguments** are used, at compile time, to determine the signature of the method that will be invoked.

Oleh itu, mekanisme pemilihan kaedah Java mengabaikan masa jalan sebenar jenis objek yang diluluskan sebagai hujah kaedah.

Implikasi:

Tingkah laku ini boleh mempunyai implikasi yang ketara. Contohnya, apabila berurusan dengan objek polimorfik atau hierarki kelas, gelagat beban lampau yang dijangkakan berdasarkan jenis parameter sebenar mungkin tidak berlaku.

Alternatif:

Jika penyemakan jenis masa jalan dikehendaki, Java menyediakan mekanisme alternatif seperti refleksi dan generik, yang menawarkan fleksibiliti yang lebih besar dalam mengendalikan jenis objek yang berbeza.

Atas ialah kandungan terperinci Mengapa Kaedah Java Overloading Mengabaikan Jenis Parameter Masa Jalan?. 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