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,一经查实,立即删除!

相关文章

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

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

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()方法&…

java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别

[Java教程]Java字节流与字符流的区别0 2017-05-22 12:00:42字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的&#xff0c…

php获取html中文本框内容_小猿圈Python入门之批量获取html内body内容的方法

对于人工智能你了解有多少?你知道Python的使用吗?这个对于大部分初学者来说都是很难的,小猿圈Python讲师会每天为大家选择分享一个知识点,希望对你学习Python有所帮助,今天分享的就是批量获取html内body内容的方法。现…

php改名下载,PHP如何给上传的文件改名

PHP如何给上传的文件改名发布时间:2020-08-03 16:07:39来源:亿速云阅读:72作者:LeahPHP如何给上传的文件改名?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这…

python 循环 覆盖之前print内容_Python爬虫第二战---爬取500px图片

前言:如今的高速网络极大促进了信息的展示方式,高清图片,视频等成就了我们的视听盛宴。但是,我们获取到的图片或者视频可能是被压缩过的,所以总体上还是有点小瑕疵,今天呢,我给大家带来一篇使用…

php字符串分割tp模板,ThinkPHP 模板substr的截取字符串函数详解

ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码/**** 截取中文字符串**/function msubstr($str, $start0, $length, $charset"utf-8", $suffixtrue){if(function_exists("mb_substr")){$slice mb_substr($str, $start, $length, $…

vscode中如何创新建php文件,vscode如何创建代码模板

选择菜单里的 文件 > 首选项 > 用户代码片段选择你需要自定义模板的文件,以vue为例配置对应文件json把代码片段写在json里。每个代码段都是在一个代码片段名称下定义的,并且有prefix、body和description。prefix是用来触发代码片段的。使用 $1&…

php 利用个人邮箱,利用 Composer 完善自己的 PHP 框架(二)——发送邮件

利用 Composer 完善自己的 PHP 框架(二)——发送邮件2014-10-18 / 阅读数:23506 / 分类: PHP回顾上一篇文章中,我们手工建造了一个简易的视图加载器,顺便引入了错误处理包,让我们的 MFFC 框架在 M、V、C 三个方面都达到…

启动马达接线实物图_东元伺服驱动马达

东元伺服驱动马达,我公司主营德国SEW,德国法勒VAHLE, 德国UNING,德国同驰Tschan,意大利威卡WESTCAR,德国久茂JUMO,瑞士ABB等几大世界品牌产品。东元伺服驱动马达, 工业机器人电动伺服系统的一般…

三维数据平滑处理_黑白象片的密度信息 卫星数据处理 遥感制图 三维建模 善图科技...

黑白象片的密度信息象片上的黑白变化,可划分为若干等级,此等级称之为灰阶。象片上的灰阶数受洗印技术及目视分辨能力的限制,一般不超过10个灰阶。灰阶较多时,象片上层次分明易于分辨一些细节。但灰阶的增多必导至对比度相对下降&a…

oracle左连接数据会对不上吗,一周工作总结–左连接造成的一些问题-Oracle

一周工作总结–左连接造成的一些问题今天有同事告诉我,有个SQL执行了好久好久执行不出来,我说好就是多久?她说一天左右了。真是令人咋舌的SQL。于是我要来了SQL看了看执行计划,确实让人咋舌。下图中就是执行计划的截图&#xff1a…

网页设计上机考试原题_全国计算机三级信息安全考试 经验分享

为什么选择信息安全?误打误撞报的名,正好又听说是三级里面最好过的。1)时间:九月份的考试,大概六月份报名。我在9月2日开学后,才开始准备的,也就二十几天的时间,而且我白天课不少&am…

newifi mini固件_如何在vmware虚拟机中安装OpenWrt系统,含x86固件编译教程

"OpenWrt项目是针对嵌入式设备的Linux操作系统", 这是官方给出的定义。OpenWrt确实是一个非常好的嵌入式学习系统,目前市面上上千款设备支持运行OpenWrt,如小米路由、newifi、netgear路由、360路由等。各大wifi芯片厂商sdk开始采用…

宝塔linux忘记密码,宝塔忘记登录入口了怎么解决 宝塔面板密码忘记了怎么办

因为性能和安全性上的突出优势,现在用宝塔LINUX面板配置网站环境的站长越来越多,但一些粗心大意的站长经常会遇到这个问题,密码想不起来了,入口链接忘记了,宝塔忘记登录入口了怎么解决 宝塔面板密码忘记了怎么办呢&…

minitab怎么算西格玛水平_六西格玛黑带培训工具因子分析的使用

六西格玛黑带培训工具因子分析的使用-张驰咨询一、该命令用于将数据结构简化为较少的量,因子分析的重点是确定能够解释数据变异大的因子数量。二、对话框内容。1、variables:输入需包含在分析中的变量栏。2、Numberoffactorstoextract:输入需…

linux curl 编译命令,linux 编译 curl 出错

编译curl make 死活不通过,唉执行参数如下,谢谢各位帮忙看看这一步一切正常rootdebian:~/curl-7.45.0# ./configure --with-sslmake一顿编译之后 ...... 然后出错了../lib/.libs/libcurl.so: undefined reference to SSLv2_client_method../lib/.libs/li…

linux 禁用smb服务,Samba 4.11 发布,更好的可扩展性与默认禁用SMB1

Samba 4.11是这个SMB/CIFS/AD实现的最新大功能更新,用于提供与Linux和其他平台更好的Windows互操作性。 Samba 4.11的变化非常多,我们有点惊讶它没有被称为Samba 5.0。也许最令人兴奋的是Samba 4.11具有很大的可扩展性改进,它应该能够扩展到1…

elementui table渲染不出来_测试开发不会前端?ElementUI你需要了解一下

在测试部门内平台类工具的开发需求越来越多,因此也推动了测试开发职位薪水逐步升高。如果开发一个web测试平台,前端技术是必不可少的,像是js、css等。一般在企业内,一个正式产品的前后端开发是职责分明的。端开发只负责业务逻辑&a…

python 画图 线标注_最简洁的Python时间序列可视化实现

TUSHARE 金融与技术学习兴趣小组 翻译整理、编辑 | 一只小绿怪兽译者简介:北京第二外国语学院国际商务专业研一在读,目前在学习Python编程和量化投资相关知识。作者:DataCamp时间序列数据在数据科学领域无处不在,在量化金融领域也…