作为我的家庭作业的一部分,我已经获得了一个已经准备好的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不可见"
这可能是什么原因?我非常感谢任何帮助!我希望我提供的代码足够了.我以前没有遇到过这个错误信息,所以我不知道该怎么做.
问题的核心是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)
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)