что не так с моим определением класса? - PullRequest
0 голосов
/ 15 декабря 2011

Почему этот класс не скомпилируется?

class Exam {

private int score;

    // constructor initializes score to 99
    public  void Exam() {
        score = 99;
    }

    // returns the current value of score
    private int getScore() {
       return score;
    }

    // returns the String representation of the Object
    public String toString() {
        return "The score is " + getScore();
    }
}

Ответы [ 6 ]

7 голосов
/ 15 декабря 2011

Ваш конструктор не должен иметь тип возвращаемого значения.Даже не пусто.

public Exam() {
    score = 99;
}
3 голосов
/ 15 декабря 2011

Конструкция не должна содержать ключевое слово void:

public Exam() {
    score = 99;
}

Конструктор возвращает ссылку на вновь созданный объект.Но вам не нужно это писать.Поэтому думать, что это void также неправильно.

2 голосов
/ 15 декабря 2011

Конструкторам не нужны типы возврата. Удалите пустоту, и вы должны быть установлены.

1 голос
/ 15 декабря 2011

В конструкторе вы не используете void.

Напишите конструктор как:

public Exam() { 
    score = 99; 
} 
0 голосов
/ 15 декабря 2011

Просто предложение, не связанное с конкретной проблемой:

private int score;

// returns the current value of score
private int getScore() {
   return score;
}

Нет смысла иметь это getScore(), если вы собираетесь его сохранить private. Сделай это public.

Кроме того, всегда используйте аннотацию @Override всякий раз, когда вы собираетесь переопределить какой-либо метод. Компилятор сообщит вам, если вы этого не сделаете. Это означает предотвращение ошибок.

1012 *, например *

// returns the String representation of the Object
@Override
public String toString() {
    return "The score is " + getScore();
}
0 голосов
/ 15 декабря 2011

Основная проблема - объявление отсутствующего пакета.

package yourpkg;

class Exam {

Кроме того, тип возвращаемого значения для Exam() делает его функцией вместо конструктора и выдает предупреждение.

...