java - java 面向对象连接两个类

标签 java class object

我希望创建两个新类(class),我可以将它们连接起来。 我想创建一个玩家和团队类。我的目标是将一名球员分配到一个球队。基本上我希望使用类中的类作为属性。

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

public class Player {
    String first_name;
    String last_name;
    int age;
}

我的团队是这样的;

public class Team {
    String Member1;
    String Member2;
}

以及我的主要类(class);

Player Player1 = new Player("Peter", "Jensen", 24);

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

最佳答案

现实生活中什么是团队?这是一群球员,所以你需要让TeamPlayers组成,然后问一个问题“哪里有最大的信息量来完成平均球员年龄的计算? ”此信息放置在 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;
        }

    }

团队级别:

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

    }

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

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

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

关于java - java 面向对象连接两个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591494/

相关文章:

c++ - 如何将类成员函数的返回类型设置为私有(private)结构的对象

java - 如何将Java类转换为另一个类

Javascript 对象监听自己的事件

java - 在 Java 中绘制图元的最简单方法(不是 OpenGL)

java - Hibernate 与同一类的多个多对多关系

c++ - 模板类指针 c++ 声明

javascript - 用户如何获取两个时间戳之间的对象

python - 无法更新 python 类中的属性

java - PhantomJS多次加载同一页面不起作用,无法清除缓存

java - LiquiBase diff 和 diffChangeLog 未检测到更改