我了解到当对象与另一个对象紧密关联时,将使用内部类。因此LinkedList类可能包含一个内部Node类,因为每个Node只存在于其LinkedList中。
我正在考虑制作一款游戏,我正在考虑使用双层Tiles制作一个Map对象,其中每个Tile都是一个内部类。
但后来我认为,Map类应该是Game类中的内部类。
因此我们有
class Game {
class Map {
Tile[][] grid;
class Tile {
...
}
...
}
class Unit {
...
}
class Player {
...
}
...
}
然而,这似乎过分,因为它只会产生一个庞大的文件。这是一个问题吗?还是我完全误解了内部阶级的观点?
在选择将新课程设为内部或外部时应考虑哪些因素,如果选择是内部的,那么内部课程何时应为static
?
答案 0 :(得分:6)
何时使用内部课程既是艺术,也是科学。基本上看看你的代码文件有多大以及每个类的大小。如果一个类很大而且很复杂,它应该放在它自己的文件中。如果它很小(例如一个侦听器接口的单个函数实现)并且在其他地方重新使用那么它应该是一个内部类。
事实上,重复使用可能是最重要的标准之一。任何可以重复使用的东西都应该重复使用,并且应该适当地确定范围以实现这一点。
内部类的一个重要优点是它们可以帮助封装,保持内部类的内部实现。如果其他类不需要知道你的内部类(或者在某些情况下甚至存在它们)那么这就是他们内心的一个很好的理由。
答案 1 :(得分:1)
这不是'太多'的问题,至少在你达到一些硬限制之前是这样。这是一个可以合理地说属于什么的问题。 Map将始终具有Entries,它可以是内部类。游戏并不总是有地图,所以地图不应该是游戏的内在。
答案 2 :(得分:1)
我要问的问题是“内在阶级本身是否有意义?”类型Map
的对象是否有意义,或Game.Map
是否会增加重要值?
我会Map
自己有意义,因此应该是一个外层阶级。然后,您可以使用名称空间指定Game和Map的紧密关系。
答案 3 :(得分:0)
在您尝试实施的游戏示例中,y。 Map和tiles可以是一个合适的数据结构,而不是单独的内部类。将它们作为课程的任何具体要求?
答案 4 :(得分:-5)
根据我自己的观点,内部类只是无用而导致糟糕的设计,使用不应授予的访问权限,使代码不清楚。 只是忘了它。
(我个人认为,当然)