java 一个类实现两个接口的案例

 更新时间:2020年10月07日 11:36:51   作者:ymzdb7  
这篇文章主要介绍了java 一个类实现两个接口的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

直接用英文逗号分隔就可以了,比如:

inerface IHello {
  String sayHello(String name);
 
}
interface IHi {
  String sayHi(String name);
 
}
 
class ServiceImpl implements IHello, IHi {// 实现三个四个。。。n个接口都是使用逗号分隔
public String sayHello(String name) {
  return "Hello, " + name;
 
}
public String sayHi(String name) {
  return "Hi, " + name;
 
}
}

补充知识:Java 一个类实现的多个接口,有相同签名的default方法会怎么办?

看代码吧~

public interface A {
  default void hello() {
    System.out.println("Hello from A");
  }
}
public interface B extends A {
  default void hello() {
    System.out.println("Hello from B");
  }
}
public class C implements B, A {
  public static void main(String... args) {
    new C().hello();
  }
}

这段代码,会打印什么呢?

有三条规则

类永远赢。类声明的方法,或者超类声明的方法,比default方法的优先级高

否则,子接口赢

否则,如果集成自多个接口,必须明确选择某接口的方法

上面代码的UML图如下

所以,上面的代码,输出是

Hello from B

如果这样呢?

public class D implements A{ 
  
}
public class C extends D implements B, A {
  public static void main(String... args) {
    new C().hello();
  }
}

UML图是这样的

规则1说,类声明的方法优先级高,但是,D没有覆盖hello方法,它只是实现了接口A。所以,它的default方法来自接口A。规则2说,如果类和超类没有方法,就是子接口赢。所以,程序打印的还是“Hello from B”。

所以,如果这样修改代码

public class D implements A{ 
  void hello(){
    System.out.println("Hello from D");
  }
}
public class C extends D implements B, A {
  public static void main(String... args) {
    new C().hello();
  }
}

程序的输出就是“Hello from D”。

如果D这样写

public abstract class D implements A {
  public abstract void hello();
}

C就只能实现自己的抽象方法hello了。

如果是这样的代码呢

public interface A {
  default void hello() {
    System.out.println("Hello from A");
  }
}
public interface B {
  default void hello() {
    System.out.println("Hello from B");
  }
}
public class C implements B, A { 
  
}

UML图如下

会生成这样的编译器错误

"Error: class C inherits unrelated defaults for hello() from types B and A."

怎么修改代码呢?只能明确覆盖某接口的方法

public class C implements B, A {
  void hello(){
    B.super.hello();
  }
}

如果代码是这样的,又会怎样呢?

public interface A{
  default void hello(){
    System.out.println("Hello from A");
  }
}
public interface B extends A { 
  
}
public interface C extends A { 
  
}
public class D implements B, C {
  public static void main(String... args) {
    new D().hello();
  }
}

UML图是这样的

很明显,还是不能编译。

以上这篇java 一个类实现两个接口的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 显示SonarQube私有项目徽章方案流程

    显示SonarQube私有项目徽章方案流程

    这篇文章主要为大家介绍了如何显示SonarQube私有项目徽章方案的流程,sonarQube目前不支持私有项目的徽章图片获取,这个问题早在 2018年就在sonar社区里有过激烈的讨论,至今无果,只能自己寻求一种可以快速实施的方案
    2022-02-02
  • eclipse实现DSA数字签名

    eclipse实现DSA数字签名

    这篇文章主要为大家详细介绍了eclipse实现DSA数字签名算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 聊聊springboot 整合 hbase的问题

    聊聊springboot 整合 hbase的问题

    这篇文章主要介绍了springboot 整合 hbase的问题,文中给大家提到配置linux服务器hosts及配置window hosts的相关知识,需要的朋友可以参考下
    2021-11-11
  • Java注解简介和使用详细讲解

    Java注解简介和使用详细讲解

    Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注,这篇文章主要介绍了Java注解的介绍和使用详细讲解,需要的朋友可以参考下
    2023-02-02
  • 使用SpringSecurity设置角色和权限的注意点

    使用SpringSecurity设置角色和权限的注意点

    这篇文章主要介绍了使用SpringSecurity设置角色和权限的注意点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java注解Annotation原理及自定义注解代码实例

    Java注解Annotation原理及自定义注解代码实例

    这篇文章主要介绍了Java注解Annotation原理及自定义注解代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • springboot下配置多数据源的方法

    springboot下配置多数据源的方法

    本篇文章主要介绍了springboot下配置多数据源的方法,具有一定的参考价值,有兴趣的可以了解一下
    2017-04-04
  • Java数据结构之List的使用总结

    Java数据结构之List的使用总结

    List是Java中比较常用的集合类,指一系列存储数据的接口和类,可以解决复杂的数据存储问题,本文就来拿实际案例总结介绍一下List的使用方法,感兴趣的朋友快来看看吧
    2021-11-11
  • SpringBoot中实现Druid前端监控界面自动登录功能

    SpringBoot中实现Druid前端监控界面自动登录功能

    这篇文章主要介绍了SpringBoot中实现Druid前端监控界面自动登录功能,需要的朋友可以参考下
    2024-08-08
  • Java Map简介_动力节点Java学院整理

    Java Map简介_动力节点Java学院整理

    Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。本文是动力节点java学院给大家整理的java map知识,需要的的朋友参考下吧
    2017-05-05

最新评论