Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java子类一般概念_Java_Subclass - Fatal编程技术网

Java子类一般概念

Java子类一般概念,java,subclass,Java,Subclass,为了好玩,我想用Java制作一个篮球模拟游戏。我想要一个简单的类“team”,我想要一个名为“player”的类team的子类。我知道如何声明类和子类,但我的问题是如何向某个团队声明一个玩家 例如: Team team1 = new Team(); Team team2 = new Team(); Player nameHere = new Player(); 我如何将其设置为这里的玩家姓名在第1组或第2组中的位置,等等。我认为您不完全理解“固有”的含义。 超类的子类应该是超类的特例 请参阅以

为了好玩,我想用Java制作一个篮球模拟游戏。我想要一个简单的类“team”,我想要一个名为“player”的类team的子类。我知道如何声明类和子类,但我的问题是如何向某个团队声明一个玩家

例如:

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);
    }
}
要知道的是继承(是一种)vs
composition(有一种)
关系


希望这有帮助。

您需要类似的东西

class Team {
    List<Player> players;

    Team() {
        players = new ArrayList<Player>();
    }

    public void addPlayer(Player p) {
        players.add(p);
    }
}
要知道的是继承(是一种)vs
composition(有一种)
关系


希望这能有所帮助。

您需要了解两个重要的软件设计原则:

- 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.
}

其他人提供了很好的解释,但让我补充一点

许多没有经验的开发人员使用子类化来保存代码。他们如此迷恋在学校学到的继承,以至于他们急切地想把所有东西都分解到某个公共基类中,然后疯狂地将其子类化

这是错误的做法

一个类不应该是另一个类的子类,如果它们共享代码,而是共享相同的行为。所以问问你自己,一个球员和一个团队有相同的行为吗

可能不会

例如,一支球队有一个时间表,一份对手名单,一个老板,一个城市,一个出席人数,一个体育场,等等。球员们没有。所以
玩家
不应该将
团队
子类化。然而,
团队
,就像其他人提到的那样,由
列表组成是有意义的

但是现在让我们把它变得更加复杂和有趣

我们来考虑一个足球队。球队中的球员可以进球、助攻和犯规。团队也可以拥有所有这些东西,团队对这些东西的价值是所有球员价值的总和。但与其使用继承,不如使用一个名为
可测量的
(我知道是个蹩脚的名字)的接口,并让
团队
玩家
实现我想要的