java - 如何将父类属性添加到子类
问题描述
我有一个名为Set
代表一组网球比赛的父类。
public class Set {
private String set1;
private String set2;
private String set3;
//private Object[] match;
public Set() {
setSet1(set1);
setSet2(set2);
setSet3(set3);
}
public void setSet1(String set1) {
this.set1 = set1;
}
public String getSet1() {
return set1;
}
public void setSet2(String set2) {
this.set2 = set2;
}
public String getSet2() {
return set2;
}
public void setSet3(String set3) {
this.set3 = set3;
}
public String getSet3() {
return set3;
}
public String toString(){
return String.format("set1: %s, set2: %s, set3: %s", set1, set2, set3);
}
}
Set
和一个名为的子类SingleSet
,我尝试将集合添加到一个名为 `game.
public class SingleSet extends Set{
private Object homePlayer;
private Object awayPlayer;
private String[] game;
public SingleSet(Object homePlayer, Object awayPlayer){
super();
game = new String[3];
game[0] = super.getSet1();
game[1] = super.getSet2();
game[2] = super.getSet3();
setHomePlayer(homePlayer);
setAwayPlayer(awayPlayer);
}
public void setHomePlayer(Object homePlayer) {
this.homePlayer = homePlayer;
}
public Object getHomePlayer() {
return homePlayer;
}
public void setAwayPlayer(Object awayPlayer) {
this.awayPlayer = awayPlayer;
}
public Object getAwayPlayer() {
return awayPlayer;
}
public void setGame(String[] game) {
this.game = game;
}
public String[] getGame() {
return game;
}
public String toString(){
return String.format("Player: %s Vs. Player: %s, Single set game: %s, %s, %s", homePlayer, awayPlayer, game[0], game[1], game[2]);
}
}
这是我试图将Set
我父母类中的 s 添加到我的子类中的地方(这是用于 FXML,所以代码在我的控制器中):
public void submit() {
SingleSet game1 = new SingleSet(homePlayer1Dropdown.getValue(), awayPlayer1Dropdown.getValue());
game1.setSet1(set1Box1.getText());
game1.setSet2(set1Box2.getText());
game1.setSet3(set1Box3.getText());
System.out.println(game1);
}
当我打印结果时,我的数组值为空。我尝试单独打印它们并且效果很好,所以我知道set1Box.getText()
它工作正常。
解决方案
- 您没有在 Set 的默认构造函数中设置任何内容
- 真的应该为您的班级找到一个更好的名称,因为“Set”与集合 Set 混淆。
- 为你的两个类使用不可变来避免麻烦 - 删除所有设置器并在构造函数中初始化。
- 我不擅长网球得分规则,但据我所知,“一局”有许多“比赛”,而“比赛”由多局组成。这种关系“Set <- SingleSet”的逻辑是什么?如果您以这种方式更改层次结构会怎样(在伪代码中,为简洁起见,将跳过大多数方法主体):
class Player{
private String name;
public Player(String name);
}
class Match{
private Player homePlayer;
private Player awayPlayer;
private List<Set> sets;
public Match(Player homePlayer, Public awayPlayer);
public List<Set> getSets(){
if(sets == null){
sets = new ArrayList<>();
}
return sets;
}
}
class Set{
public Set(Game... games);
}
class Game{
// game score details
public Game(int scoreHomePlayer, int scoreAwayPlayer);
}
所以在你的控制器中,你可以像这样使用它:
Match match = new Match(new Player("Williams"), new Player("Johnson"))
match.getSets().add(new Set(
new Game(6, 1),
new Game(4, 6),
new Game(7, 0)
// etc.
))
- 您可以使用Builder Pattern进一步重构 #4 层次结构并保留所有这些“new ()”构造函数调用,大致如下:
Match match = new MatchBuilder("Williams","Johnson").addSet()
.addGame(6,1).addGame(4,6).addGame(7,0)
.build()
推荐阅读
- python - 值类型错误 Python3:只能连接元组
- flutter - 当我使用 facebook flutter 登录时出现“FacebookLoginStatus.error”
- database - 出现错误:错误状态:无法获取 DocumentSnapshotPlatform 上不存在的字段
- jprofiler - JProfiler:为什么代理类不显示在调用树中?
- javascript - 如何在不滚动的情况下按下按钮上下移动
- javascript - 我想用相同的按键操作按顺序交替执行不同的操作过程
- python - 列表包含具有相同值的数组
- laravel - 将 aws-s3-v3 与 laravel 和 digitalocean 空间一起使用会导致错误 501 未实现
- c# - UWP 项目导航
- python - 在 Python 中使用 plotnine geom_smooth 手动更改趋势线的线型