2015-11-18 71 views
-1

我累了找出優先順序,寫下了行爲特殊的代碼。我希望答案是黑色的,但它會產生白色。變量名精細定單

任何人都可以幫助我理解這一點。

public class Main { 
    public static void main(String[] args) { 
     System.out.println(X.Y.Z); // prints 'White' 
    } 
} 

class X { 
    static class Y { 
     static String Z = "Black"; 
    } 

    static C Y = new C(); 
} 

class C { 
    String Z = "White"; 
} 
+3

聲明'靜態CY =新C();'導致代碼以打印出「白」,而不是「黑」因爲這會覆蓋類X的靜態成員Y.除此之外,這是可怕的代碼。這是非常不可讀的。 – sengbatz

+1

@SkinnyJ我喜歡這只是一個類'C'而不是'W'和其他字符串完全相同的問題 – SomeJavaGuy

回答

3

您已經創建了一個名稱masks靜態類YC類型)。要獲得black,您必須訪問課程Y。你可以做到這一點像,

System.out.println(new X.Y().Z); //<-- prints black 

或重新命名遮蔽場

static C Z = new C(); // <-- from Y.