Kes Keingintahuan Kaedah Statik Memanggil Melalui Contoh
Walaupun pengetahuan meluas tentang tingkah laku aneh Java, persoalannya tetap: mengapa memanggil a kaedah statik melalui contoh yang tidak dianggap sebagai ralat oleh pengkompil?
Mishap Reka Bentuk Pengkompil
Pereka Java secara tidak sengaja memperkenalkan anomali ini ke dalam reka bentuk bahasa. Percubaan untuk membetulkan isu itu akan mewujudkan cabaran keserasian, menjadikan ia sebagai kecacatan yang berterusan.
Kod Mengelirukan
Walaupun tingkah laku itu tidak salah dari segi teknikal, ia membawa kepada sangat mengelirukan kod. Panggilan kepada kaedah menggunakan pengendali titik membayangkan penggunaan nilai contoh. Apabila kaedah statik, jangkaan ini dilanggar.
Pengendalian Tidak Konsisten
Pengendalian panggilan kaedah statik Java adalah tidak konsisten. Walaupun ia tidak membenarkan memanggil kaedah statik melalui pembolehubah contoh yang tidak dimulakan, ia memberikan kebenaran untuk kejadian yang dimulakan, walaupun nilai masa pelaksanaan tidak relevan.
Pertimbangan Warisan
Bertentangan dengan tuntutan, pewarisan tidak terpakai kepada kaedah statik. Ia bukan polimorfik, seperti yang ditunjukkan dalam kod berikut:
class Base { static void foo() { System.out.println("Base.foo()"); } } class Derived extends Base { static void foo() { System.out.println("Derived.foo()"); } } public class Test { public static void main(String[] args) { Base b = new Derived(); b.foo(); // Prints "Base.foo()" } }
Panggilan kaedah statik kekal tidak terjejas oleh nilai masa jalan kejadian, mendedahkan kekurangan polimorfisme dan menyerlahkan lagi sifat mengelirukan panggilan sedemikian.
Atas ialah kandungan terperinci Mengapa Java Tidak Menganggap Memanggil Kaedah Statik Melalui Kejadian sebagai Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!