【问题标题】:Java Inheritance: Hockey fights in the HockeyTeam classJava 继承:HockeyTeam 类中的曲棍球比赛
【发布时间】:2020-03-02 00:33:27
【问题描述】:

我正在尝试通过曲棍球队示例练习继承

public class HockeyPlayer {
    private String firstName;
    private String lastName;
    private String teamName;

    public HockeyPlayer(String first, String last) {
        firstname = first;
        lastName = last;
    }

    public void print() {
        System.out.print(firstName + " " + lastName);
    }
}
public class HockeyTeam extends HockeyPlayer {
    private String teamName;
    public HockeyTeam(String first, String last, String s) {
        super(first, last);
        teamName = s;
    }
    public String getTeamName() {
        return teamName;
    }
    public void fight() {
        super.print();
        System.out.print(" is fighting against ");
    }
}
public class HockeyGame {
    public static void main(String[] args) {

        HockeyTeam team1Player1 = new HockeyTeam("Sidney","Crosby","Pittsburgh Penguins");
        HockeyTeam team2Player1 = new HockeyTeam("Jack","Campbell","Toronto Maple Leafs");

        team1Player2.fight();
    }
}

如你所见,我也包括了互相打架的曲棍球运动员。有没有办法让两个曲棍球运动员在 HockeyTeam 课上互相打架?

【问题讨论】:

  • 我试图让曲棍球运动员互相打架当我参加曲棍球比赛时,我讨厌它爆发了一场愚蠢的比赛。

标签: java inheritance subclass superclass


【解决方案1】:

由于这个问题的重点是关于多态性,我将首先尝试给出好的建议。 (我的意思是尝试)。

当一个类从另一个类扩展时,您是在说 classA 是 classB。在这种情况下,我不相信曲棍球队是曲棍球运动员。可以通过使用抽象类并让团队从它们扩展来使用多态性,例如从曲棍球队扩展的 Spokane Chiefs 并覆盖他们的方法。 SpokaneCheifs 将是他们自己的课程,在您的情况下,您是在运行时创建每个团队。

如果您希望两支球队在“打架”期间相互连接,您可以让打架方法接受一个 HockeyTeam 对象,例如 teamA.fight(teamB)。这样,teamA 就可以访问 teamB 与他们的公共 getter/setter “战斗”,我不确定你希望他们如何战斗,通常使用 RNG 来决定获胜者和任何损失。

另外,我喜欢您使用 DVC 的方式,但除非您知道在某些情况下您会使用名称为空的播放器,或者在运行时使用 setter 创建它;最好删除它并使用您的 EVC。如果你有一个显式值构造函数,Java 不会创建一个默认值构造函数,除非你指定它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多