Java - поле не видно - PullRequest
       0

Java - поле не видно

3 голосов
/ 09 октября 2011

Как часть моей домашней работы мне дали уже подготовленный метод public static void main. Моя работа состоит в том, чтобы дополнить это, создав все соответствующие методы. Это должно быть сделано в трех других классах.

В уже подготовленном методе main есть следующий код:

ticket = new LotteryTicket(10);
ticket.ticketOwner = new Player();

LotteryTicket и Player - другие классы, созданные мной. Соответствующие переменные экземпляра в классе LotteryTicket:

private LotteryRow[] rows;
private Player ticketOwner;

public LotteryTicket(int maxNumberOfRows) {
    this.rows = new LotteryRow[maxNumberOfRows];
}

Player, как уже упоминалось, еще один класс, который я создал. В этом классе, помимо прочего, есть метод для ввода пользователем данных, таких как имя, адрес, почтовый индекс и т. Д.

Когда я пытаюсь запустить программу, я получаю сообщение об ошибке в строке ticket.ticketOwner = new Player();. Ошибка: «Поле LotteryTicket.ticketOwner не видно»

Что может быть причиной этого? Буду очень признателен за любую помощь! Я надеюсь, что код, который я предоставил, является достаточным. Раньше я не сталкивался с этим сообщением об ошибке, поэтому затрудняюсь понять, что делать.

Ответы [ 5 ]

9 голосов
/ 09 октября 2011

Суть проблемы заключается в том, что поле (ticketOwner), к которому вы пытаетесь получить доступ, помечено private.Кроме того, по крайней мере из того, что мы видим, кажется, что отсутствуют средства получения / установки для доступа к нему.

Хотя быстрое исправление для этого состоит в добавлении getter/setters и доступе к полю, используя их, или уродливый способ сделать поле public.Но вы хотели бы читать дальше ...

Ваша лучшая ставка (если игрок необходим для лотерейного билета, что кажется так) - иметь экземпляр Player в конструкторе LotteryTicket,поэтому нет никаких дополнительных затрат.

public LotteryTicket(int maxNumberOfRows, Player player) {
        this.rows = new LotteryRow[maxNumberOfRows];
        this.ticketOwner = player;
}

РЕДАКТИРОВАТЬ

Ваш вызов будет выглядеть так:

Player p = new Player();
// invoke APIs on (Player p), if needed
ticket = new LotteryTicket(10, p);
5 голосов
/ 09 октября 2011

ticketOwner объявлен закрытым, поэтому обычно не отображается в вашем классе выполнения.

в классе тикетов вы должны добавить метод установки.

public void setTicketOwner(Player p) {

this.ticketOwner = p;

}

тогда вместо

ticket.ticketOwner = new Player();

до

ticket.setTicketOwner(new Player());
2 голосов
/ 09 октября 2011

Они были объявлены закрытыми, объявите их как открытые или, что еще лучше, создайте открытые методы получения / установки для инкапсуляции.

1 голос
/ 09 октября 2011

private означает, что к нему нельзя получить доступ из другого класса.

Обычно существует метод, подобный setTickerOwner, для установки такого поля из другого класса.

1 голос
/ 09 октября 2011

Вы объявили это как личную переменную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...