2011-04-07 52 views
0
public enum Scale2 { 

    GOOD('C') { 
     public char getGrade() { 
      return grade; 
     } 
    }, 
    BETTER('B') { 
     public char getGrade() { 
      return grade; 
     } 
    }, 
    BEST('A') { 
     public char getGrade() { 
      return grade; 
     } 
    }; 

    private char grade; 

    Scale2(char grade) { 
     this.grade = grade; 
    } 

    // (1) INSERT CODE HERE 
    public char getGrade() { 
     return grade; 
    } 

    public static void main (String[] args) { 
     System.out.println(GOOD.getGrade()); 
    } 
} 

這是一個來自khalid mughal scjp guid的程序,以下是選項和問題。當我試圖在eclipse中運行它時,它說非靜態等級不能從靜態上下文訪問,我認爲按照概念它的權利,但是我很困惑我的書是寫或者是...請重播。scjp關於枚舉的問題

在(1)處插入哪個代碼將使程序打印C?

選擇兩個正確答案。

(a) public char getGrade() { return grade; } 

(b) public int getGrade() { return grade; } 

(c) abstract public int getGrade(); 

(d) abstract public char getGrade(); 

回答

1
GOOD('C') 
{ public char getGrade() { return grade; } }, 
BETTER('B') { public char getGrade() { return grade; } }, 
BEST('A') 
{ public char getGrade() { return grade; } }; 
private char grade; 

問題與樣本代碼是grade被聲明爲private。所以grade不能從其子類訪問。 grade可以從其子類或Scale2的子類訪問,應該訪問gradesuper.getGrade()方法。

// (1) INSERT CODE HERE 
public char getGrade() { return grade; } // inserted! 

也已插入了可能正確的代碼在您的文章,並,這本書是錯誤的。

+0

感謝您的好解釋 – yagnya 2011-04-07 05:18:50