我正在尝试通过曲棍球队示例进行继承方面的练习
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班上互相搏斗?
由于此问题的重点是关于多态性,因此我将首先就此提供良好的建议。 (我的意思是尝试)。
[当一个类从另一个类扩展时,您是说classA是classB。在这种情况下,我认为曲棍球队不是曲棍球运动员。多态可以通过使用抽象类并从其扩展团队来使用,例如从曲棍球队扩展Spokane Chiefs并覆盖其方法。 SpokaneCheifs将是他们自己的类,在您这种情况下,您需要在运行时组建每个团队。
[如果您希望两支球队在“战斗”中相互联系,则可以使Fight方法接收HockeyTeam对象,例如teamA.fight(teamB)。这样,A团队就可以访问B团队与他们的公共接力者/接力者“战斗”,我不确定您希望他们如何战斗,通常使用RNG来决定获胜者和任何损失。
[此外,我喜欢您使用DVC的方式,但是除非您知道在某些情况下,您将使用带有空白名称的播放器,或者在运行时使用setter创建它;最好将其删除并使用您的EVC。如果您具有显式值构造器,则Java除非您为其指定,否则不会创建默认值构造器。