[英]Java Enum - what's the difference between enum has override logic and enum abstract factory and each class has override logic?
[英]What's the difference between override and hidden in java?
我搜索了很多。 它們之間的區別在於,override是針對實例方法的,而hidden是針對靜態方法的。 隱藏實際上是對方法的重新定義。 但是我仍然沒有得到它。如果重新定義意味着父類的靜態方法仍然存在於子類中,那只是我們看不到它? 或者為什么我們把它稱為隱藏而不是任何其他詞? 但如果它存在,我找不到再次調用該方法的方法。 說實話,從功能層面來說,我找不到它們為什么不同。 有人可以從更深層次的內存中解釋它嗎?
從JLS 8.4.8.2開始 ,示例8.4.8.2-1向我們顯示隱藏方法綁定到引用的類型( Super
),而overriden方法綁定到Object( Sub
)的類型。
class Super {
static String greeting() { return "Goodnight"; }
String name() { return "Richard"; }
}
class Sub extends Super {
static String greeting() { return "Hello"; }
String name() { return "Dick"; }
}
class Test {
public static void main(String[] args) {
Super s = new Sub();
System.out.println(s.greeting() + ", " + s.name());
}
}
輸出:
Goodnight, Dick
靜態成員(方法和變量)將不會出現在繼承它們的子類(子類)對象中,但它們將作為單個副本存在於內存中。
靜態成員可以通過Super類和子類的類名訪問,但它們實際上不存在於這些類的對象中。
在繼承非靜態成員的情況下,內存中的Sub類對象將包含繼承的方法以及它自己的方法。 因此,當您嘗試在此處編寫類似的方法時,將覆蓋超類方法。 另一方面,由於靜態方法不參與繼承,所以您編寫的任何類似方法都存在於超類中,新方法將在每次要求時運行。 父類方法只是隱藏但沒有被覆蓋!
如果調用Superclass.staticMethod()
您將獲得超類中定義的方法,而不管子類中是否存在任何隱藏。 另一方面,如果你調用((Superclass)subObj).instanceMethod()
你仍然會調用該方法,因為它在子類中被覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.