作为我作业的一部分,我已经获得了一个已经准备好的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
不可见”
这可能是什么原因?我非常感谢任何帮助!我希望我提供的代码足够了。我以前没有遇到过这个错误信息,所以我不知道该怎么做。
答案 0 :(得分: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;
}
修改强>
您的调用将如下所示:
Player p = new Player();
// invoke APIs on (Player p), if needed
ticket = new LotteryTicket(10, p);
答案 1 :(得分:5)
ticketOwner被声明为私有,因此在执行类中不可见。
在票证类中,你必须添加一个setter方法。public void setTicketOwner(Player p) {
this.ticketOwner = p;
}
然后代替
ticket.ticketOwner = new Player();
做
ticket.setTicketOwner(new Player());
答案 2 :(得分:2)
他们已被宣布为私有,宣称他们是公开的,甚至更好地创建公共getters/setters进行封装。
答案 3 :(得分:1)
您将其声明为私有var
答案 4 :(得分:1)
private
表示无法从其他类访问它。
通常有一种方法,如setTickerOwner
,用于从另一个类设置这样的字段。