首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8使用一个接口在另一个接口中实现方法

Java 8使用一个接口在另一个接口中实现方法
EN

Stack Overflow用户
提问于 2020-03-09 19:53:55
回答 1查看 197关注 0票数 1

抱歉,如果重复,不知道这个问题的正确术语,所以我没有发现有人提出类似的问题。

我有两个接口。让我们说狗和宠物。宠物有一个游戏方法,这是抽象的。狗不伸长宠物。不过,它有一个默认的play方法,它与Pet的play方法签名相匹配。

狗是一个同时实现犬类和宠物的类。狗喜欢使用狗的默认游戏方法。

我该如何干净利落地实现这一点呢?我唯一能看到的就是如果我做了这样的傻事

代码语言:javascript
复制
class Dog implements Canine, Pet{
    public Dog(){
    }
    @Override
    public void play (String greeting) {
        Canine.super.play(greeting);
    }

}

interface Canine {
    default void play (String greeting) {
        System.out.println(greeting);
    }
}

interface Pet {
    void play (String greeting);
}

据我所知,在C++中,您可以声明一个类使用方法的默认实现,而不是在该类中实现它。在java 8中有类似的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-09 20:11:51

这已经是一种干净的做法。为了让它更清楚一点,请检查下面程序的输出,其中Dog extends Animal也有一个play方法,但不会在Canine的default play方法存在的情况下调用。

代码语言:javascript
复制
class Animal {
    public Animal() {
    }

    public void play(String greeting) {
        System.out.println("Before greeting in Animal");
        System.out.println(greeting);
        System.out.println("After greeting in Animal");
    }
}

class Dog extends Animal implements Canine, Pet {
    public Dog() {
    }

    @Override
    public void play(String greeting) {
        System.out.println("Before greeting in Dog");
        Canine.super.play(greeting);
        System.out.println("After greeting in Dog");
    }
}

interface Canine {
    default void play(String greeting) {
        System.out.println("Before greeting in Canine");
        System.out.println(greeting);
        System.out.println("After greeting in Canine");
    }
}

interface Pet {
    void play(String greeting);
}

public class Main {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.play("Hello");
    }
}

输出:

代码语言:javascript
复制
Before greeting in Dog
Before greeting in Canine
Hello
After greeting in Canine
After greeting in Dog
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60607468

复制
相关文章

相似问题

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