scjp-вопрос по перечислению

#java #scjp

#java #scjp

Вопрос:

 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, и ниже приведены варианты и вопросы. Когда я попытался запустить это в eclipse, там говорилось, что нестатический класс не может получить доступ из статического контекста, я думаю, что в соответствии с концепцией это правильно, но я в замешательстве, какую книгу написать или я … пожалуйста, воспроизведите.

Какой код, вставленный в (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 . so grade недоступен из его подклассов.
Либо grade должен быть доступен из его подклассов, либо подклассы Scale2 должны получать доступ grade через super.getGrade() метод.

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

Вы вставили, возможно, правильный код в свой пост, и да, книга неверна.