Java 什么';这是允许我的孩子类访问它的最佳方式';谁的父母信息?

Java 什么';这是允许我的孩子类访问它的最佳方式';谁的父母信息?,java,class,parent-child,Java,Class,Parent Child,这是我目前的班级结构 播放器现在需要一些关于GUI和表的信息。我怎样才能做到最好? 使桌子静止?(只有一张桌子) 在玩家的构造函数中传递一个表实例和相应的座位 将每个播放器方法所需的数据作为参数传递 如果可能的话,我希望避免重新构造代码以包含中间类或类似的类。在这一点上,这将是一个很大的努力。谢谢:) 编辑: 只是澄清一下,因为我的图表是垃圾。GUI包含一个表实例,表包含十个座位,每个座位可能包含一个播放器,也可能不包含一个播放器。没有使用继承。我将选择第二个选项,在player的构造函

这是我目前的班级结构

播放器现在需要一些关于GUI和表的信息。我怎样才能做到最好?

  • 使桌子静止?(只有一张桌子)
  • 在玩家的构造函数中传递一个表实例和相应的座位
  • 将每个播放器方法所需的数据作为参数传递
如果可能的话,我希望避免重新构造代码以包含中间类或类似的类。在这一点上,这将是一个很大的努力。谢谢:)


编辑:
只是澄清一下,因为我的图表是垃圾。GUI包含一个表实例,表包含十个座位,每个座位可能包含一个播放器,也可能不包含一个播放器。没有使用继承。

我将选择第二个选项,在player的构造函数中传递表的实例和相应的席位。

如果player扩展席位、席位扩展表和表扩展GUI,则player应该可以访问其父级中包含的所有(公共)信息。这是面向对象(OO)编程的基本思想


从长远来看,让桌子保持静止可能会伤害你。如果将代码重构为上面建议的内容太困难,那么我建议您使用第二个要点(将表格和座位传递给Player的构造函数)。

如果我理解您的操作,我会认为GUI会有一个表格的实例,一张桌子将有一个座位数组,玩家将被分配到桌子上座位数组中的一个位置。桌子可以有公开的方法来向玩家提供玩家可能需要的关于桌子和座位阵列中其他玩家的信息。GUI可以通过table、seat和player类中的公共方法向播放器提供关于表和所有播放器的信息。我真的不明白table、seat和player是如何成为GUI的子类的,因为我假设GUI是一个GUI,除了显示和提供用户输入手段之外没有其他功能。

使播放器需要保护的字段得到保护。这将允许播放器访问表和GUI的信息。

我只是将播放器所需的数据作为参数传递给它的方法。我肯定是想得太多了,因为我只有少量的数据要传递。如果需要更广泛的数据,请查看其他答案之一

这是我的table类中的一个示例方法,通过调用需要这些变量的一个Players方法,将它自己的两个变量和一个seats变量传递给Player类

seats[j].getPlayer().raise(raised, seats[j].getPosition(), inPlaySeats);

这将是一个UML类图,它将意味着席位从播放器继承,表格从席位继承,GUI从表格继承。但是x1/x10看起来更像ER图中的基数(每个表10个席位,每个GUI 1个席位,玩家席位关系)?但是你说的是孩子和父母。谁是谁的孩子?使表为静态意味着每个JVM有一个表,而不是每个GUI/JFrame,这在比较并行执行的不同策略时可能会很有趣。使某个东西保持静态通常是对遥远未来的限制。@userunknown GUI包含一个表实例,表包含十个座位,每个座位可能包含一个播放器,也可能不包含一个播放器。没有使用继承。除非表是静态的,否则玩家如何访问表的公共方法?Seat类有一个玩家实例作为成员,table类有一个席位对象数组作为成员,player类有一个对玩家所在表的引用。对Player类持有的表的引用可用于访问表类的公共方法。这是一个简单的例子,说明了如何从Player类调用Table类的公共方法。我该如何引用Table?因为创建一个实例会创建一个无法保持最新的副本,不是吗?简单的例子。Player类有一个名为“playersTable”的表的成员,当您创建一个Player对象或将其添加到表中的某个座位时,您可以在Player构造函数中传入对该玩家所坐的桌子的引用,或者使用Player类上的一个方法来设置对该桌子的引用。例子;setPlayerTable(table),其中“table”是已创建的table类的实例。然后,玩家可以使用引用调用表的公共方法,如playersTable.getPlayerName(seatNumber),以获取特定座位上玩家的姓名。如何保持表实例的副本同步?如果我要这么做的话,我需要更新所有1-11个,不是吗?如果再加上seat实例,我的程序看起来就不再是OO了。很抱歉我的回复太晚了。您不需要更新所有表实例,。它们将自动更新。如果您正在使用某些线程,则需要在shich中的方法中添加“synchronized”,表值可能会更改。抱歉,我的图表可能会误导您。我没用过继承权。应该吗?对不起,我想我把图表弄错了。我已经更新了这个问题。没有使用继承。似乎继承正是您所需要的。您是否尝试过重构域对象,以便它们像在图中一样相互扩展?通常,最好按照您在纸上看到的方式实现代码。我希望player类尽可能轻量级,因为我可能会将它的实例保存到SQL数据库中,或者在以后的更新中使其可打包。这可能有点过头了,玩家类所需要的只是它上面的table和seat实例的一到两个Int。扩展你的基类也不会有什么坏处。扩展不会使人变得更“重”(取决于超级链接中包含的数据量)