java 面向对象连接两个类

Pet*_*ard 0 java class object

我希望开设两个新课程,以便将它们联系起来。我想创建一个玩家和团队类。我的目标是将一名球员分配到一个球队。基本上我希望使用类中的类作为属性。

我想象我的玩家类别是这样的;

public class Player {
    String first_name;
    String last_name;
    int age;
}
Run Code Online (Sandbox Code Playgroud)

我的团队是这样的;

public class Team {
    String Member1;
    String Member2;
}
Run Code Online (Sandbox Code Playgroud)

和我的主要课程包括;

Player Player1 = new Player("Peter", "Jensen", 24);
Run Code Online (Sandbox Code Playgroud)

所以我想做的是计算特定球队中我的球员的平均年龄。有什么想法或建议吗?

fxr*_*bfg 5

现实生活中什么是团队?这是一群玩家,所以你需要Team组成Players,然后问一个问题“哪里有最大量的信息来完成平均玩家年龄的计算?” 这些信息放置在Team班级(玩家列表)内,我们需要放置计算班级平均年龄的方法Team。这被称为信息专家原则,是众多优秀的 oop 设计原则之一。

https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#Information_expert

所以这样的话代码就会像这样:

玩家等级:

  public class Player {
        private String firstName;
        private String lastName;
        private int age; 

        public Player(String firstName, String lastName, int age) {
            this.firstName = firstName;
            this.lastName = lastName;
            this.age = age;
        }

        public String firstName() {
            return firstName;
        }

        public String lastName() {
            return lastName;
        }

        public String age() {
            return age;
        }

    }
Run Code Online (Sandbox Code Playgroud)

团队类别:

  public class Team {
        private List<Player> players;

        Team(List<Player> players) { 
           this.players = players;
        }

        public void add(Player player) {
            players.add(player);
        }

        public void remove(Player player) {
            players.remove(player);
        }

        public double averageAge() {
            double sum = 0;
            double amount = players.size();
            for (Player player : players) {
                sum += player.age();
            }
            return sum / amount;
        }

    }
Run Code Online (Sandbox Code Playgroud)

之后我们就可以以各种方便的方式使用这些类,例如:

public class Test {

    public static void main(String[] args) {
        Team team = new Team(Arrays.asList(new Player[] {
            new Player("Peter", "Jensen", 24),
            new Player("Foo", "Bar", 50)
        }));
        System.out.println(team.averageAge()); // 37
    }
}
Run Code Online (Sandbox Code Playgroud)

只需向团队询问球员的平均年龄是多少,团队就会回复您。