Зачем нам нужен модификатор доступа "stati c" для некоторых методов, подобных следующему? - PullRequest
0 голосов
/ 09 апреля 2020

Вот код, который я получил из книги Герберта Шильдта «Java: полный справочник» на стр. 239, 240 в формате PDF. Я исследовал "stati c", но в этом случае мне интересно, почему нужно использовать stati c.

import java.util.Random;

interface SharedConstants {
    int NO = 0;
    int YES = 1;
    int LATER = 3;
    int SOON = 4;
    int NEVER = 5;
}

class Question implements SharedConstants {
    Random rand = new Random();

    int ask() {
        int prob = (int) (100 * rand.nextDouble());
        if(prob < 30) return NO;
        else if(prob < 60) return YES;
        else if(prob < 75) return LATER;
        else if(prob < 98) return SOON;
        else return NEVER;
    }
}

public class AskMe implements SharedConstants {
    static void answer(int result) {
        switch(result) {
            case NO:
                System.out.println("No");
                break;
            case YES:
                System.out.println("Yes");
                break;
            case LATER:
                System.out.println("Later");
                break;
            case SOON:
                System.out.println("Soon");
                break;
            case NEVER:
                System.out.println("Never");
                break;
        }
    }

    public static void main(String[] args) {
        Question q = new Question();
        answer(q.ask());
        answer(q.ask());
        answer(q.ask());
        answer(q.ask());
    }
}

Мне интересно, какая строка создала метод answer в классе AskMe. Зачем нам нужен контроль доступа "stati c"? В противном случае компилятор выдаст ошибку типа «ошибка: на метод non-stati c не может быть получена ссылка на метод (int) из контекста stati c».

Заранее спасибо.

(Это мой первый вопрос, если возникнут ошибки, скажите мне)

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете , но без static вам потребуется экземпляр AskMe для вызова answer в main. Мол,

void answer(int result) {
    switch(result) {
        case NO:
            System.out.println("No");
            break;
        case YES:
            System.out.println("Yes");
            break;
        case LATER:
            System.out.println("Later");
            break;
        case SOON:
            System.out.println("Soon");
            break;
        case NEVER:
            System.out.println("Never");
            break;
    }
}

public static void main(String[] args) {
    Question q = new Question();
    AskMe askMe = new AskMe();
    askMe.answer(q.ask());
    askMe.answer(q.ask());
    askMe.answer(q.ask());
    askMe.answer(q.ask());
}
...