Java继承:HockeyTeam类中的Hockey打架

问题描述 投票:0回答:1

我正在尝试通过曲棍球队示例进行继承方面的练习

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个回答
1
投票

由于此问题的重点是关于多态性,因此我将首先就此提供良好的建议。 (我的意思是尝试)。

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

[如果您希望两支球队在“战斗”中相互联系,则可以使Fight方法接收HockeyTeam对象,例如teamA.fight(teamB)。这样,A团队就可以访问B团队与他们的公共接力者/接力者“战斗”,我不确定您希望他们如何战斗,通常使用RNG来决定获胜者和任何损失。

[此外,我喜欢您使用DVC的方式,但是除非您知道在某些情况下,您将使用带有空白名称的播放器,或者在运行时使用setter创建它;最好将其删除并使用您的EVC。如果您具有显式值构造器,则Java除非您为其指定,否则不会创建默认值构造器。

© www.soinside.com 2019 - 2024. All rights reserved.