Java类中实现的两个具有相同方法签名的接口

我有两个Java接口和一个实现类。

(我已经使用Eclipse直接运行程序,并且我没有尝试通过从命令行进行显式编译来检查任何编译器警告等)。

为什么它们运行没有问题?为什么Java允许这样做,即使它满足两个接口的“合同”,却在实现类时造成歧义?

更新了示例。

public interface CassettePlayer {

void play();

}

public interface DVDPlayer {

void play();

}

public class CarPlayer implements CassettePlayer,DVDPlayer{

@Override

public void play() {

System.out.println("This plays DVD, screw you Cassette !");

}

public static void main(String args[]) {

CarPlayer cp = new CarPlayer();

cp.play();

CassettePlayer firstInterface = new CarPlayer();

firstInterface.play();

DVDPlayer secondInterface = new CarPlayer();

secondInterface.play();

}

}

回答:

Java语言规范的第8.1.5节专门允许这种情况:

类中的单个方法声明可以实现多个超级接口的方法。例如,在代码中:

interface Fish { int getNumberOfScales(); }

interface Piano { int getNumberOfScales(); }

class Tuna implements Fish, Piano {

// You can tune a piano, but can you tuna fish?

int getNumberOfScales() { return 91; }

}

getNumberOfScales类中的方法Tuna的名称,签名和返回类型与interface中声明的方法匹配,Fish并且还与interface中声明的方法匹配Piano;它被认为同时实现。

然后,文本继续指出,如果方法签名具有不同的返回类型(例如double和)int,则将无法在同一类中实现两个接口,并且会产生编译时错误。

以上是 Java类中实现的两个具有相同方法签名的接口 的全部内容, 来源链接: utcz.com/qa/400501.html

回到顶部