Rumah >Java >javaTutorial >Mengapa Kaedah Java Overloading Mengabaikan Jenis Parameter Masa Jalan?
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!