2012-01-13 48 views
0

我對Java中的下面的行爲感到困惑,我知道靜態繼承是不可能的Java然後我怎麼能夠調用A類的B類靜態成員?java中的靜態成員行爲

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 
+0

我認爲「靜態繼承」並不意味着你的想法。以上是完全合法的Java代碼。 – 2012-01-13 01:01:40

+0

我相信這是一個靜態方法不能被覆蓋。而基類函數不能被靜態方法隱藏。 – Mondo 2012-01-13 01:01:59

+1

http://stackoverflow.com/questions/8095457/why-do-we-say-that-a-static-method-in-java-is-not-a-virtual-method – Flexo 2012-01-13 01:03:19

回答

2

你在這裏做什麼不是「靜態遺產」這意味着什麼,但普通的舊名稱解析(在編譯時)。這是有效的,因此除了B本身定義的名稱之外,您可以在任何地方放置A來限定名稱。

1

繼承static成員可能的,作爲示例顯示。 Polymorphic static函數是不可能的,所以B不可能覆蓋AstaticMethod()

+0

你是對的。可以使用相同的簽名來隱藏超類靜態方法和子類。但是,您不能用子類非靜態方法重寫超類靜態方法,反之則遵循以下重寫規則。 – 2012-01-13 07:07:32

0

我認爲靜態方法/變量就像OP語言中的函數。