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

    public static void test(){

    }

    public abstract void test();

}

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

PHP中文网
PHP中文网

认证0级讲师

全部回覆(5)
伊谢尔伦

這是因為靜態方法和實例方法的簽章不能相同,因為java允許在實例物件上呼叫類別靜態方法,正是因為有這個允許,所以不能有相同簽章的方法,看例子:

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該執行誰呢?
就是都是正常的方法也不能同名同參啊,jvm會傻的

左手右手慢动作

方法簽章:由方法名稱參數資料據型決定方法唯一性

上面兩個方法方法名稱和參數一致,導致在編譯編譯過程中報錯

TestMethod.java:6: 錯誤: 在類別 TestMethod中定義了方法 test()

public void test(){
            ^ 1 个错误

這與Java的動態綁定特性有關

刘奇

不管是靜態還是抽象方法都是類別來定義的,既然都是類別來定義那它們肯定不能同名同參。

刘奇

java中的重載和重寫,也不容許有這樣的規則。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板