[英]static members behavior in java
我對Java中的以下行為感到困惑,我知道Java無法實現靜態繼承,那么我如何能夠調用A的B類靜態成員?
public class A {
static int staticVariable = 5;
public static void staticMethod(){
System.out.println("A");
}
}
public class B extends A{}
public class C {
public static void main(String[] args) {
A.staticMethod();
B.staticMethod();
System.out.printf("A's int value %d and B's int value is %d",A.staticVariable,B.staticVariable);
}
}
輸出:
A
A
A's int value 5 and B's int value is 5
無論做什么,您在這里所做的都不是“靜態繼承”,而是簡單的舊名稱解析(在編譯時)。 這樣可以使您可以在放置A的所有位置使名稱限定為B,但B本身定義的名稱除外。
繼承static
成員是可能的,因為你的例子顯示。 多態static
函數是不可能的,因此B
不可能覆蓋A
的staticMethod()
。
對於類方法,運行時系統將調用在調用該方法的引用的編譯時類型中定義的方法。 對於實例方法,運行時系統將調用在調用該方法的引用的運行時類型中定義的方法。
閱讀本文以了解更多詳細信息: http : //krsethur.wordpress.com/2005/12/15/static-method-inheritance/
我認為靜態方法/變量就像OP語言中的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.