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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

inerface IHello {

String sayHello(String name);

}

interface IHi {

String sayHi(String name);

}

class ServiceImplimplements IHello, IHi {// 实现三个四个。。。n个接口都是使用逗号分隔

public String sayHello(String name) {

return "Hello, " + name;

}

public String sayHi(String name) {

return "Hi, " + name;

}

}

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方法会怎么办?

看代码吧~?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public interface A {

default void hello() {

System.out.println("Hello from A");

}

}

public interface Bextends A {

default void hello() {

System.out.println("Hello from B");

}

}

public class Cimplements B, A {

public static void main(String... args) {

new C().hello();

}

}

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图如下

c558f3114f51261993044bf849afd0d6.png

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

Hello from B

如果这样呢??

1

2

3

4

5

6

7

8

public class Dimplements A{

}

public class Cextends Dimplements B, A {

public static void main(String... args) {

new C().hello();

}

}

public class D implements A{

}

public class C extends D implements B, A {

public static void main(String... args) {

new C().hello();

}

}

UML图是这样的

603c1e4f598874a22323c147d058e72a.png

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

所以,如果这样修改代码?

1

2

3

4

5

6

7

8

9

10

public class Dimplements A{

void hello(){

System.out.println("Hello from D");

}

}

public class Cextends Dimplements B, A {

public static void main(String... args) {

new C().hello();

}

}

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这样写?

1

2

3

public abstract class Dimplements A {

public abstract void hello();

}

public abstract class D implements A {

public abstract void hello();

}

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

如果是这样的代码呢?

1

2

3

4

5

6

7

8

9

10

11

12

13

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 Cimplements B, A {

}

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图如下

f40ee47e9aa42585145a5f4e1e8dad5c.png

会生成这样的编译器错误

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

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

1

2

3

4

5

public class Cimplements B, A {

void hello(){

B.super.hello();

}

}

public class C implements B, A {

void hello(){

B.super.hello();

}

}

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public interface A{

default void hello(){

System.out.println("Hello from A");

}

}

public interface Bextends A {

}

public interface Cextends A {

}

public class Dimplements B, C {

public static void main(String... args) {

new D().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图是这样的

db6b0d5999c0a11f7ce27a38564d6e42.png

很明显,还是不能编译。

以上这篇java 一个类实现两个接口的案例就是小编分享给大家的全部内容了,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机 架构 程序 经验总结_单片机学习心得体会_经验总结

单片机简介单片机主要由运算器、控制器和寄存器三大部分构成。其中,运算器由算术逻辑单元(ALU)、累加器、寄存器等构成,首先累加器和寄存器向ALU输入两个8位源数据,其次ALU完成源数据的逻辑运算,最后将运算结果存入寄存器中;控制器…

java按照io流向基类_Java IO详解

1 Java IO流的概念,分类1.1 Java IO流的概念java的IO是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。流的本质是数据传输&#xff0c…

go语言os.exit(1)_在Golang中各种永远阻塞的姿势

在Golang中各种永远阻塞的姿势Go的运行时的当前设计,假定程序员自己负责检测何时终止一个goroutine以及何时终止该程序。可以通过调用os.Exit或从main()函数的返回来以正常方式终止程序。而有时候我们需要的是使程序阻塞在这一行。使用sync.WaitGroup一直等待直到Wa…

基于java二手书论文_java毕业设计_springboot框架的二手书交易管理与实现

今天介绍一个java毕设题目, 题目内容为springboot框架的二手书交易管理与实现, 是一个采用b/s结构的javaweb项目, 采用java语言编写开发工具eclipse, 项目框架jspspringbootmybatis, 二手书交易管理与实现的信息存储于mysql中, 并基于mybatis进行了orm封装, 该二手书交易管理与…

vue 分享微信传参_vue实现微信分享链接添加动态参数的方法

微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下1.安装引用jssdknpm install --save weixin-js-sdkconst wxrequire(weixin-js-sdk)2.通过config接口注入配置信息const jsApiList […

linux挂载cifs磁盘_linux使用windows磁盘,挂载共享目录

实例说明:客户两台服务器,一台web服务器(linux)只有50G,课程资源太多太大导致磁盘不够用;客户的文档服务器(windows)磁盘很大超过1T,所以产生了,将web资源使用文档服务器磁盘的想法;windows文档服务器192.168.-.-用户名…

java怎么给list集合排序_java list集合排序按某一属性排序操作

我就废话不多说了,大家还是直接看代码吧~public List sortList(List list){Collections.sort(list, new Comparator(){Overridepublic int compare(FreightM o1, FreightM o2) {if(o1.getType()0){return -1;}else{return 1;}}});return list;}实现compareTo()方法&…

excel显著性检验_使用Excel2016比较两组数据显著性差异

软件信息:Excel for Mac版本:16.26(19060901)许可证:Office 365订阅步骤一:导入(输入)数据步骤二:为Excel添加分析工具的加载项插件,路径为:工具→Excel加载项→分析工具库步骤三:开…

java 标准输入流 关闭 打开_java--标准输入输出流

//读取键盘录入的数据写到a.txt//方式一private static void method() throws IOException {//创建输入流对象InputStream is System.in;Reader r new InputStreamReader(is);//创建输出流对象FileWriter fw new FileWriter("a.txt");//读取数据byte[] bys new b…

adb native raact 夜神_React-Native安装及环境搭建(夜神模拟机运行)

React-Native环境搭建及运行必须安装的依赖有:Node、JDK 和 Android Studio。Node去官方下载,安装一直下一步下一步就好,最好是改下安装路径。这里主要记录JAVA JDK和Android Studio.一.安装JAVA JDKJAVA和React Native没有直接关系。React N…

php object keys_原生js中Object.keys方法详解

实际开发中,有时需要知道对象的所有属性,原生js提供了一个方法Object.keys()。Object.keys(obj)返回的是一个数组,该数组的所有元素都是字符串。这些元素是来自于给定的obj可直接枚举的属性,这些属性的顺序与手动遍历该对象属性时…

中望3d快捷键命令大全_CAD、3D快捷命令

1、对象特性ADC, *ADCENTER(设计中心“Ctrl+2”)CH, MO *PROPERTIES(修改特性“Ctrl+1”)MA, *MATCHPROP(属性匹配)ST, *STYLE(文字样式)COL, *COLOR(设置颜色)LA, *LAYER(图层操作)LT, *LINETYPE(线形)LTS, *LTSCALE(线形比例)LW, *LWEIGHT(线宽)UN, *U…

php 字符串函数 教程_PHP 字符串获取 substr 与 strstr 函数

PHP 字符串获取用于从字符串中获取指定字符串。相关函数如下:substr():从字符串中获取其中的一部分strstr():查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符subchr():同 strstr()s…

can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?

网上有人说道&#xff1a;(1)一般配置在75-80%的位置(2)选择采样点位置在85%左右为佳(3)75% when 波特率 > 800K80% when 波特率 > 500K87.5% when 波特率 < 500K那么到底是多少呢&#xff1f;本博主在ISO11898-1没有找到确切的值。但是cia官网找到了(http:…

简单的php,php简单语句

标签&#xff1a;(01)PHP标记 <?php ?>?>(02)输出语句//echo 不加括号能打印多个值//print 有返回值不能打印多个值//die() 输出并退出程序//exit() 输出并退出程序//printf() 格式化输出//sprintf() 格式化返回//var_dump() 输出全部信息和内…

内固定取出术后护理_股骨内固定钢板取出术后护理查房记录范文

病情分析&#xff1a;2009年10月26日 手术后精神,饮食,睡眠,体重变化等指导意见&#xff1a;一, 护理业务查房&#xff1a;  1, 临床临床护理查房&#xff1a;  是对新入,危重病人的现存护理问题,措施,护理效果,护理质量进行的护理查房,目的是检查,指导责任护士的工作质量,…

python echo命令_如何用Python调用外部命令

解决方法方法1&#xff1a;我们可以使用subprocess&#xff0c;比如要执行 ls -l 命令import subprocesssubprocess.run("ls", "-l")Python3.5 之前的版本&#xff0c;需要使用 callimport subprocesssubprocess.call(["ls", "-l"])方…

vba php,VBA

【行业前景】很多时候&#xff0c;当我们提起VBA&#xff0c;就想到和Excel有关&#xff0c;其实这里所提到的VBA是依附在Excel平台上进行的二次开发&#xff0c;当然它还可以大量应用在其他的软件中&#xff0c;可用VBA进行二次开发。对于我们最常使用的Excel&#xff0c;VBA可…

ios 捕抓crash_ios crash的原因与抓取crash日志的方法

首先我们经常会闪退的异常有哪些呢&#xff1f;crash的产生来源于两种问题&#xff1a;违反iOS策略被干掉&#xff0c;以及自身的代码bug。1.IOS策略1.1低内存闪退前面提到大多数crash日志都包含着执行线程的栈调用信息&#xff0c;但是低内存闪退日志除外&#xff0c;这里就先…

php 多线程上传,PHP CURL 多线程操作代码实例

/** Curl 多线程类* 使用方法&#xff1a;* $urls array("http://baidu.com", "http://dzone.com", "http://google.com");$mp new MultiHttpRequest($urls);$mp->start();* */class MultiHttpRequest {public $urls array();public $curl…