我正在尝试编写一些代码(新手java用户),我收到了一个错误。我有一种预感,它与我对AdvancedMatch的类定义有关,这是锦标赛中的一个匹配。它需要有两个馈线匹配,可以是AdvancedMatch或InitMatch,其中InitMatch没有馈线,AdvancedMatch也没有。为了达到这个目的,我使用了一个界面ITournament,它让我可以选择将ITournament放在AdvancedMatch的数据结构中。
public class AdvancedMatch implements ITournament {
MatchData data;
ITournament feeder1;
ITournament feeder2;
AdvancedMatch (MatchData data, ITournament feeder1, ITournament feeder2) {
this.data = data;
this.feeder1 = feeder1;
this.feeder2 = feeder2;
}
}
public class InitMatch implements ITournament {
MatchData data;
InitMatch (MatchData data) {
this.data = data;
}
}
interface ITournament {
public Boolean allScoresValid();
public Boolean highCapacityVenue(int ticketsSold);
public Boolean winnerAlwaysAdvanced();
public Boolean tWinnerContestant1() ;
}
稍后在代码中,我尝试在方法中调用feeder1.data,并且我不断收到数据无法解析或不是字段的错误。这让我感到困惑,因为显然数据是AdvancedMatch和InitMatch的一部分。
public Boolean winnerAlwaysAdvanced() {
if (this.feeder1.tWinnerContestant1()) {
this.data.dCompareContestants1(this.feeder1.data);
}
else
return this.data.dCompareContestants2(this.feeder1.data);
}
}
任何帮助都将不胜感激。
答案 0 :(得分:1)
您的feeder1被声明为ITournament ITournament feeder1;
- 它未被声明为具有InitMatch
属性的data
。
当使用接口声明变量时,它只能访问 interface 中声明的内容,而不管底层的类实例。
由于InitMatch和AdvancedMatch都有 data 元素,因此您可以在接口定义中包含该元素。然而,最佳实践需要“吸气剂”,而不是直接访问。
interface ITournament {
public Boolean allScoresValid();
public Boolean highCapacityVenue(int ticketsSold);
public Boolean winnerAlwaysAdvanced();
public Boolean tWinnerContestant1();
public MatchData getMatchData();
}
答案 1 :(得分:0)
对于要实现接口的类,它必须实现接口的所有方法。
您的任何一个类都没有实现ITournament
接口的所有方法。