Rumah >Java >javaTutorial >Mengapa Java Tidak Menganggap Memanggil Kaedah Statik Melalui Kejadian sebagai Ralat?

Mengapa Java Tidak Menganggap Memanggil Kaedah Statik Melalui Kejadian sebagai Ralat?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 22:13:11926semak imbas

Why Doesn't Java Treat Calling Static Methods Through Instances as an Error?

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!

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