interface Golfer{
public static final int HighScore = 90;
public static final int LowScore = 72;
public int computeScore();
}
interface Bowler{
public static final int HighScore = 300;
public static final int LowScore = 120;
public void computeScore();
}
现在class不可能同时实现二者。尽管两个interface的computerScore()具有的签名式(signature),返回类别却不相同,因此会产生编译错误。
签名式 - 包括航数名和参数。但并不包括返回类型。
现在让两个interface的返回类型也一样,那么用一个class去继承这两个interface就没有问题了。
interface Golfer{
public static final int HighScore = 90;
public static final int LowScore = 72;
public void computeScore();
}
class Enthusiast implement Golfer,Bowler{
public void computeScore(){
//现在没有问题。
}
}
现在你发现两个interface申明的常量也一样。这个可以解决
int golflowscore = Golfer.LowScore;//通过限定名来拿常量
但是computeScore计算的是那个的分数呢? 假如这个函数是个通用的函数那也没有问题,但现在并不通用。
1、修改源码让两个interface中的函数不一样。
2、为每个interface实现一个独立的类。
class GolfEnthusiast implement Golfer{
}
interface是设计和开发代码的利器,但是在定义interface时,存在着函数及常量名称发生冲突的可能性,你应当谨慎地为函数和常量命名,减少与其他interface名称发生冲突的机会。