首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java类中实现的两个具有相同方法签名的接口

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

Stack Overflow用户
提问于 2012-03-26 04:38:46
回答 6查看 19.1K关注 0票数 16

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

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

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

更新了示例。

代码语言:javascript
复制
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();
    }
}
EN

回答 6

Stack Overflow用户

发布于 2012-12-07 16:22:57

对于这个问题,有必要了解接口的用途。

接口是一种“契约”,这样就可以知道哪些方法是在具有该接口的类中强制实现的。

因此,如果你需要一个实现"DVDPlayer“的类(因为你需要”play()“方法),你可以找到CarPlayer。实现CassettePlayer的类的需求也是如此。这是技术上的解释。

当然,在您的语义编码中,您应该确保CarPlayer的方法"play()“同时满足DVDPlayer和CassettePlayer的语义。我认为在实际应用中,这将是一种糟糕的做法。

当然,在您的示例中,让两个接口声明相同的方法并不是一个好主意。更实际的情况是,您应该使用"play()“方法创建一个接口" Player”,并从Player继承另外两个更具体的接口DVDPlayer和CassettePlayer (具有用于DVD和磁带的特定方法)。另一方面,如果你不需要DVD或盒式磁带的特定方法,那么你不需要两个不同的接口只实现一个相同的方法-只需使用一个接口播放器,这就足够了。

票数 5
EN

Stack Overflow用户

发布于 2015-04-14 00:17:58

在这种情况下,没有问题,因为两个接口具有相同的方法签名。但是这个呢?

代码语言:javascript
复制
interface Animal {
    public void eat() throws IOException;
}

interface Plants {
    public void eat() throws NullPointerException;
}

编译器选择哪一个?为什么在代码下面会出现错误?

代码语言:javascript
复制
public class Test implements Animal, Plants {

    public void eat() throws IOException {

    }
}

编译器说:异常IOException与Plants.eat()中的throws子句不兼容

票数 2
EN

Stack Overflow用户

发布于 2012-03-26 04:41:09

不存在冲突,因为它们都指定了相同的约定,实现类只提供一个方法,该方法在通过任一接口被引用时被调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9863835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档