Java子类一般概念
为了好玩,我想用Java制作一个篮球模拟游戏。我想要一个简单的类“team”,我想要一个名为“player”的类team的子类。我知道如何声明类和子类,但我的问题是如何向某个团队声明一个玩家 例如:Java子类一般概念,java,subclass,Java,Subclass,为了好玩,我想用Java制作一个篮球模拟游戏。我想要一个简单的类“team”,我想要一个名为“player”的类team的子类。我知道如何声明类和子类,但我的问题是如何向某个团队声明一个玩家 例如: Team team1 = new Team(); Team team2 = new Team(); Player nameHere = new Player(); 我如何将其设置为这里的玩家姓名在第1组或第2组中的位置,等等。我认为您不完全理解“固有”的含义。 超类的子类应该是超类的特例 请参阅以
Team team1 = new Team();
Team team2 = new Team();
Player nameHere = new Player();
我如何将其设置为这里的玩家姓名在第1组或第2组中的位置,等等。我认为您不完全理解“固有”的含义。 超类的子类应该是超类的特例 请参阅以获取更多示例 你想要的是一个有吸引力的班级团队
List<Player> players;
列出玩家;
如果您想编写任何面向对象的代码,我建议您仔细阅读InherInstance。我认为您不完全理解InherInstance的含义。 超类的子类应该是超类的特例 请参阅以获取更多示例 你想要的是一个有吸引力的班级团队
List<Player> players;
列出玩家;
如果你想编写任何面向对象的代码,我建议你仔细阅读InherInstance
class Player {
//player properties and setter , getter
}
class Team{
List<Player> players = new ArrayList<Player>();
// setter and getter
}
你喜欢这样吗
class Player {
//player properties and setter , getter
}
class Team{
List<Player> players = new ArrayList<Player>();
// setter and getter
}
你需要类似的东西
class Team {
List<Player> players;
Team() {
players = new ArrayList<Player>();
}
public void addPlayer(Player p) {
players.add(p);
}
}
要知道的是继承(是一种)vscomposition(有一种)
关系
希望这有帮助。您需要类似的东西
class Team {
List<Player> players;
Team() {
players = new ArrayList<Player>();
}
public void addPlayer(Player p) {
players.add(p);
}
}
要知道的是继承(是一种)vscomposition(有一种)
关系
希望这能有所帮助。您需要了解两个重要的软件设计原则:
- Inheritance (IS A relationship)
- Composition (HAS A relationship)
当处理第一个概念时,使用类和子类。但在本例中,您的子类本质上与父类相同:它就像一辆汽车和法拉利。法拉利是一辆汽车(这种关系在OOP中通过继承来表示)。
然而,汽车有一个挡风玻璃。挡风玻璃不是汽车,而是它的一部分(这种关系通过将一个类包含为另一个类的字段成员来表示-组合)。
现在,您了解了这些关系,您需要问自己一个问题:是玩家一个团队,还是拥有团队一个玩家
在这种情况下,这似乎是显而易见的。您需要在
团队
类中放置一个列表
您需要了解两个重要的软件设计原则:
- Inheritance (IS A relationship)
- Composition (HAS A relationship)
当处理第一个概念时,使用类和子类。但在本例中,您的子类本质上与父类相同:它就像一辆汽车和法拉利。法拉利是一辆汽车(这种关系在OOP中通过继承来表示)。
然而,汽车有一个挡风玻璃。挡风玻璃不是汽车,而是它的一部分(这种关系通过将一个类包含为另一个类的字段成员来表示-组合)。
现在,您了解了这些关系,您需要问自己一个问题:是玩家一个团队,还是拥有团队一个玩家
在这种情况下,这似乎是显而易见的。您需要在
团队
类中放置一个列表
如果您认为您的团队
是玩家
的容器,您的团队
类将具有一个属性,其中包含玩家
以及用于添加、删除、清除等团队
玩家的访问器方法
当然,您的团队
类将有自己的属性和方法,可能会从团队中任何玩家
获取数据(例如,玩家数量等)
在本例中,没有与继承相关的主题
您的类只是有一个容器与“containee”的关系(Artem的回答使用了适当的术语)
例如:
class Team {
// the private property containing the players
// I use a Set here because each player is unique
private Set<Player> players;
public Team() {
// initializing the set as HashSet
players = new HashSet<Player>();
}
public void addPlayers(Player... players) {
// adding all players
for (Player p: players) {
this.players.add(p);
}
}
public Collection<Player> getPlayers() {
// returning a copy of the team's players
return new HashSet<Player>(players);
}
}
class Player {
// TODO player's properties such as name, age, feats, etc.
}
如果您认为您的
团队
是玩家
的容器,则您的团队
类将具有一个包含玩家
的属性,以及用于添加、删除、清除团队
玩家的访问器方法
当然,您的团队
类将有自己的属性和方法,可能会从团队中任何玩家
获取数据(例如,玩家数量等)
在本例中,没有与继承相关的主题
您的类只是有一个容器与“containee”的关系(Artem的回答使用了适当的术语)
例如:
class Team {
// the private property containing the players
// I use a Set here because each player is unique
private Set<Player> players;
public Team() {
// initializing the set as HashSet
players = new HashSet<Player>();
}
public void addPlayers(Player... players) {
// adding all players
for (Player p: players) {
this.players.add(p);
}
}
public Collection<Player> getPlayers() {
// returning a copy of the team's players
return new HashSet<Player>(players);
}
}
class Player {
// TODO player's properties such as name, age, feats, etc.
}
其他人提供了很好的解释,但让我补充一点 许多没有经验的开发人员使用子类化来保存代码。他们如此迷恋在学校学到的继承,以至于他们急切地想把所有东西都分解到某个公共基类中,然后疯狂地将其子类化 这是错误的做法 一个类不应该是另一个类的子类,如果它们共享代码,而是共享相同的行为。所以问问你自己,一个球员和一个团队有相同的行为吗 可能不会 例如,一支球队有一个时间表,一份对手名单,一个老板,一个城市,一个出席人数,一个体育场,等等。球员们没有。所以
玩家
不应该将团队
子类化。然而,团队
,就像其他人提到的那样,由列表组成是有意义的
但是现在让我们把它变得更加复杂和有趣
我们来考虑一个足球队。球队中的球员可以进球、助攻和犯规。团队也可以拥有所有这些东西,团队对这些东西的价值是所有球员价值的总和。但与其使用继承,不如使用一个名为可测量的
(我知道是个蹩脚的名字)的接口,并让团队
和玩家
实现我想要的