我正在尝试用一个曲棍球队的例子来练习继承
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课上打架?
发布于 2020-03-02 10:16:08
因为这个问题的主要观点是关于多态性的,所以我将尝试在这方面给出好的建议。(我的意思是尝试)。
当一个类从另一个类扩展时,您说的是classA是一个classB。在这种情况下,我不相信一个曲棍球队是一个曲棍球运动员。可以通过使用抽象类并让团队从抽象类扩展来使用多态性,例如从曲棍球团队扩展的Spokane首席执行官并覆盖他们的方法。SpokaneCheifs将是他们自己的类,在你的例子中,你是在运行时创建每个团队的。
如果您希望两个团队在“fight”期间彼此建立连接,则可以让fight方法接受一个HockeyTeam对象,如teamA.fight(teamB)。这样teamA就可以访问teamB来与他们的公共getter/setter“战斗”,我不确定你想让他们如何战斗,使用RNG来决定赢家和任何损害是很常见的。
另外,我喜欢你使用DVC的方式,但除非你知道会有这样的情况,你会使用一个空的名字,或者在运行时用setter创建一个播放器;最好是删除它并使用你的EVC。如果您有一个显式的值构造函数,Java将不会创建缺省值构造函数,除非您为它指定。
https://stackoverflow.com/questions/60481125
复制相似问题