Java - 字段不可见

Kri*_*ian 3 java field

作为我的家庭作业的一部分,我已经获得了一个已经准备好的public static void main方法.我的工作是通过创建与此相关的所有方法来补充这一点.这应该在其他三个类中完成.

在已经准备好的main方法中,有以下代码:

ticket = new LotteryTicket(10);
ticket.ticketOwner = new Player();
Run Code Online (Sandbox Code Playgroud)

LotteryTicket并且Player是我创建的其他课程.LotteryTicket该类中的相关实例变量是:

private LotteryRow[] rows;
private Player ticketOwner;

public LotteryTicket(int maxNumberOfRows) {
    this.rows = new LotteryRow[maxNumberOfRows];
}
Run Code Online (Sandbox Code Playgroud)

Player如上所述,是我创建的另一个类.在这个类中,除了其他之外,还有一种用户输入数据的方法,如姓名,地址,邮政编码等.

当我尝试运行程序时,我收到错误ticket.ticketOwner = new Player();.错误是:"字段LotteryTicket.ticketOwner不可见"

这可能是什么原因?我非常感谢任何帮助!我希望我提供的代码足够了.我以前没有遇到过这个错误信息,所以我不知道该怎么做.

Sak*_*ket 9

问题的核心是ticketOwner您要访问的字段()已标记private.此外,至少从我们看到的任何内容来看,似乎都缺少用于访问它的getter/setter.

虽然对此的快速修复是getter/setters使用它们添加和访问该字段,或者一种丑陋的方式是创建该字段public.但你想阅读......

你最好的选择(如果玩家是LotteryTicket所必需的,看起来如此)就是将Player实例放在LotteryTicket自己的构造函数中,这样就没有额外的开销.

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

编辑

你的调用看起来像这样:

Player p = new Player();
// invoke APIs on (Player p), if needed
ticket = new LotteryTicket(10, p);
Run Code Online (Sandbox Code Playgroud)


Gen*_*uro 5

ticketOwner被声明为私有,因此在执行类中不可见是正常的.

在票证类中,您必须添加一个setter方法.

public void setTicketOwner(Player p) {

this.ticketOwner = p;

}
Run Code Online (Sandbox Code Playgroud)

而不是

ticket.ticketOwner = new Player();
Run Code Online (Sandbox Code Playgroud)

做

ticket.setTicketOwner(new Player());
Run Code Online (Sandbox Code Playgroud)


Nim*_*sky 2

它们已被声明为私有,将它们声明为公共,甚至更好地创建公共getter/setter进行封装。