我知道這是一個相當毆打的話題,但有些東西我需要澄清,請耐心等待一分鐘。靜態方法重新定義規則
靜態方法被繼承,就像任何其他的方式,按照有關訪問修飾符相同的繼承規則(私有方法是不能繼承等)
靜態方法是不要過度纏身,他們被重新定義。如果一個子類定義了一個與超類相同的簽名的靜態方法,那麼它被稱爲隱藏或隱藏了超類的版本,因爲它們不是實例方法的多態。
重新定義的靜態方法似乎仍然遵循一些(如果不是全部的話)規則。
首先,重新定義的靜態方法不能是多個接入限制比超類的靜態方法。爲什麼??
其次,返回類型也必須兼容超類和子類的方法。例如:
class Test2 {
static void show() {
System.out.println("Test2 static show");
}
}
public class StaticTest extends Test2 {
static StaticTest show() {
System.out.println("StaticTest static show");
return new StaticTest();
}
public static void main(String[] args) {
}
}
在蝕它示出了在在線的錯誤: The return type is incompatible with Test2.show()
爲什麼?
和第三,是否有任何其他規則在重新定義靜態方法時遵循,這些靜態方法與上乘規則相同,這些規則的原因是什麼?
Thanx提前!!
打我吧。我將留下我的答案作爲評論:簡而言之,Java不允許定義方法,這會導致調用哪個方法時出現歧義。在你的例子中,我懷疑編譯器抱怨,因爲StaticTest.show()會不明確。 – CurtainDog 2012-08-05 08:06:43