Java:OOP概念、抽象类、接口(interface)

标签 java class oop interface abstract-class

任务1.设计并实现类SportsClub(抽象类)、FootballClub。 类应包括适当的方法并保存有关俱乐部名称、位置以及有关俱乐部的各种统计数据的信息。 FootballClub 应包含统计数据,例如其实例在本赛季取得的胜场、平局和失利次数、进球数和进球数等统计数据。俱乐部当前拥有的积分数以及已参加的比赛数。

任务 2. 实现一个类 PremierLeagueManager,它扩展了 LeagueManager 接口(interface)。 PremierLeagueManager 类维护着许多参加英超联赛的足球俱乐部。该类应创建一个基于文本输入的菜单,并为用户提供以下选择: •

  1. 创建一个新的足球俱乐部并将其添加到英超联赛中。 •

  2. 从英超联赛中删除(降级)现有足球俱乐部

  3. 显示所选俱乐部的各种统计数据。
  4. 显示英超联赛积分榜

我设计了抽象类

public abstract class SportsClub {
    int position;
    String name;
    int points;
    int wins;
    int defeats;
    int draws;
    int totalMatches;
    int goalF;
    int goalA;
    int goalD;
    String location;
}

我扩展了抽象类,我知道我可以使用 get/set 方法,但我使用构造函数来初始化(如果我磨损了,请纠正我)

public class FootballClub extends SportsClub {

     FootballClub(int position, String name, 
                  int points, int wins, 
                  int defeats, int draws, 
                  int totalMatches, int goalF, 
                  int goalA, int goalD) {
         this.position = position;
         this.name = name;
         this.points = points;
         this.wins = wins;
         this.defeats = defeats;
         this.draws = draws;
         this.totalMatches = totalMatches;
         this.goalF = goalF;
         this.goalA = goalA;
         this.goalD = goalD;     
     }
}

现在我需要编写一个接口(interface),我知道如何做到这一点,但我试图弄清楚我是在接口(interface)内部声明方法还是应该在抽象类中执行它。基本上我需要帮助我如何完成整个练习。不知道我应该使用哪个类作为 main 方法。我是一个新学习者,如果有人帮助我解决我应该如何处理的问题,我真的很困惑,我确信我自己能够做到。不要求代码需要帮助,如果有人简化我整个练习,请

最佳答案

首先是对现有代码的评论。我会在抽象父类(super class)中使用该构造函数,因为它初始化该类中的字段。

public abstract class SportsClub {
    SportsClub(int position, String name, int points, int wins, int defeats, int draws, int totalMatches, int goalF, int goalA, int goalD){
        this.position = position
        ...

然后

public class FootballClub extends SportsClub{

   FootballClub(int position, String name, int points, int wins, int defeats, int draws, int totalMatches, int goalF, int goalA, int goalD) : base(position, name, points, wins, defeats, draws, totalMatches, goalF, goalA, goalD) {
   }

这使得它对于下一个子类更加可重用。另外,作为一般规则,每当我看到方法/构造函数有这么多参数时,我都会创建一个结构/类来包含它们(例如 ClubInfo)。这样就不会那么冗长,并且类的 API 也更容易阅读。

现在回答你的问题。抽象类和接口(interface)之间的一个基本区别是接口(interface)是 100% 抽象并且没有状态(即没有字段)。因此,由于您的 SportsClub 拥有所有这些字段,因此它拥有一个状态,因此需要成为一个类。由于它不是一个完整的实现(大概您将添加实际体育俱乐部需要实现的更多方法,因为它与特定的运动相关),因此它需要是抽象的。

例如。任何体育俱乐部,无论什么运动,都可以发送有关比赛的广告。

因此,在 SportsClub 中添加以下方法: 公共(public)抽象字符串AnnounceGame();

现在,比赛的宣布方式因运动而异:

所以 FootballClub 可能会这样实现:

public string AnnounceGame() { return "Come join us at the stadium"; }

虽然 BaseballClub 可能会这样做:

public string AnnounceGame() { return "Come join us at the ball park"; }

基本思想是,例如,如果您是体育推广者阶层,您并不关心您拥有什么类型的体育俱乐部,您知道任何体育俱乐部都可以发布公告。

SportsClub clubA = new FootballClub();
SportsClub clubB = new BaseballClub();

如果我打电话:

clubA.AnnounceGame(); // outputs "Come join us at the stadium"
clubB.AnnounceGame(); // outputs "Come join us at the ball park"

因此我们使用继承来降低复杂性。发起人不必关心其拥有什么类型的体育俱乐部实例。

关于Java:OOP概念、抽象类、接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698686/

相关文章:

java - 使用 SpringMVC 在 Tomcat 中包含静态内容的外部目录

Java:如何从控制语句中检索数据?

java - 我可以在 Java 中的 ArrayList<T> 实例上使用类字段吗?

python - 如何防止 Numpy 拆分类似数组的对象

c++ - 为什么我们需要在参数化构造函数中预先初始化参数?

java - 设计模式 - Strategy and Bridge (Overlap in design)

java - 如何访问运行在虚拟机中的主机中的Web应用程序

python - 类中的生成器表达式未产生我期望的输出

JavaScript 制作标签

oop - 您应该将接口(interface)相对于它们的实现者放在哪个命名空间中?