java - 抽象类的静态方法和抽象方法为什么不能同名同参?
PHP中文网
PHP中文网 2017-04-17 18:00:38
0
5
623
public abstract class Test {

    public static void test(){

    }

    public abstract void test();

}

我觉得这样可以的啊~~为什么编译失败。

PHP中文网
PHP中文网

认证0级讲师

membalas semua(5)
伊谢尔伦

Ini kerana tandatangan kaedah statik dan kaedah contoh tidak boleh sama, kerana Java membenarkan memanggil kaedah statik kelas pada objek contoh. Ini kerana kebenaran ini tidak boleh ada kaedah dengan tandatangan yang sama.

public class Test {

    // public void main(String[] args) {} // Error

    public static void main(String[] args) {
        Test.hello(); // OK
        new Test().hello(); // OK
    }

    public static void hello() {
        System.out.println("hi");
    }
}
阿神

Jvm pada pendapat anda siapa yang patut dilaksanakan?
Walaupun semuanya kaedah biasa, mereka tidak boleh mempunyai nama yang sama dan parameter yang sama Jvm akan menjadi bodoh

左手右手慢动作

Tandatangan kaedah: Keunikan kaedah ditentukan oleh nama kaedah dan jenis data parameter

Nama kaedah dan parameter kedua-dua kaedah di atas adalah konsisten, mengakibatkan ralat semasa proses penyusunan

TestMethod.java:6: Ralat: Method test()

sudah ditakrifkan dalam kelas TestMethod
public void test(){
            ^ 1 个错误

Ini berkaitan dengan ciri ikatan dinamik Java

刘奇

Kedua-dua kaedah statik dan abstrak ditakrifkan oleh kelas Memandangkan kesemuanya ditakrifkan oleh kelas, ia mestilah tidak mempunyai nama yang sama dan parameter yang sama.

刘奇

Lebih muatan dan menulis semula dalam Java tidak membenarkan peraturan sedemikian.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan