网站首页 > java教程 正文
难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.接口嵌套接口
在实现接口中嵌套接口之前,我们先来温习一下接口嵌套接口。
演示:
请定义一个外部接口IOuter,在外部接口IOuter里面定义一个嵌套接口IInner。
请观察程序代码。
代码:
2.外部类实现嵌套接口
我们先试试外部类实现嵌套接口。
演示:
请定义一个外部接口IOuter,在外部接口IOuter中定义一个嵌套接口IInner。然后在嵌套接口IInner中定义一个静态常量、抽象方法、默认方法和静态方法。最后定义一个外部类Outer并实现嵌套接口IInner,在外部类Outer的构造方法中显示输出静态常量并调用抽象方法、默认方法和静态方法。在Main类main()方法中创建外部类Outer对象。
请观察程序运行结果。
代码:
IOuter接口:
Outer类:
Main类:
结果:
从运行结果来看,完全正确。接下来,我们来看看程序执行过程:
从Main类的main()方法开始执行,创建了外部类Outer对象,故调用了外部类Outer的构造方法:
首先执行的是显示输出静态常量:
执行结果:
构造方法继续往下执行:
此次执行的是抽象方法,但大家都知道抽象方法必须实现才能被执行,所以这里实际执行的抽象方法是:
执行结果:
构造方法继续往下执行:
此次执行的是默认方法,如果接口中的默认方法没有被重写,那么将执行的接口中的默认方法,如果被重写那么将执行实现类中被重写的默认方法,而我们实现类Outer正好重写了嵌套接口中的默认方法,所以实际执行的是实现类Outer中的默认方法:
执行结果:
好了,构造方法继续往下执行:
此次执行的是嵌套接口中静态方法,毋庸置疑实际调用的就是嵌套接口中的静态方法。执行结果:
至此,程序执行完毕!
3.内部类实现嵌套接口
上面我们用外部类实现了嵌套接口,接下来我们试试内部类可不可以实现嵌套接口。
演示:
请定义一个外部接口IOuter,在外部接口IOuter中定义一个嵌套接口IInner。然后在嵌套接口IInner中定义一个静态常量、抽象方法、默认方法和静态方法。最后定义一个外部类Outer,在外部类Outer里面定义一个内部类Inner并实现嵌套接口IInner,在内部类Inner的构造方法中显示输出嵌套接口中静态常量并调用抽象方法、默认方法和静态方法。在Main类main()方法中创建内部类Inner对象。
请观察程序运行结果。
代码:
IOuter接口:
Outer类:
Main类:
结果:
从运行结果来看,程序运行正常且结果正确。
接下来,我们开始分析程序执行过程:
main()方法中先创建外部类Outer对象,再使用外部类对象new 内部类对象,这是一种常见的创建内部类对象过程。既然创建了内部类对象,必然会调用其构造方法:
最先执行的是显示输出嵌套接口中的静态常量:
执行结果:
内部类构造方法继续往下执行:
上一小节也说过抽象方法必须实现才能被调用,所以我们看看实现类里面的抽象方法:
执行结果:
内部类构造方法继续往下执行:
接口中的默认方法若没有被实现类重写则执行的是接口中的默认方法;若被实现类重写则执行的是实现类中的默认方法。这里我们的实现类重写了接口中的默认方法,所以实际执行的是实现类中的默认方法:
执行结果:
内部类构造方法继续往下执行:
此次执行的是嵌套接口中的静态方法,毋庸置疑,必然调用的是嵌套接口中的静态方法。执行结果:
最后,整个程序执行完毕!
总结
- 外部类可以实现接口中的嵌套接口。
- 内部类可以实现接口中的嵌套接口。
至此,Java中实现接口中的嵌套接口相关内容讲解先告一段落,更多内容请持续关注。
附:接口学习资料
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
下一章
“全栈2019”Java第八十六章:嵌套接口可以多继承吗?
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!
猜你喜欢
- 2024-10-05 java8新特性Base64(java8新特性Base64位)
- 2024-10-05 我的Java Web之路64 - 会话过期链接失效问题及转发和重定向解析
- 2024-10-05 Java Web项目部署(四)-Redis、Nginx
- 2024-10-05 “全栈2019”Java第八十四章:接口中嵌套接口详解
- 2024-10-05 “全栈2019”Java第九十八章:局部内部类访问作用域成员详解
- 2024-10-05 Spring Boot图片文件转Base64(springboot 图片文件转base64)
- 2024-10-05 一条垃圾SQL,把 64 核 CPU 快跑崩了
- 2024-10-05 Base64与URLBase64浅析(base64_url)
- 2024-10-05 Java、JS、OC、Flutter的Base64编码和解码
- 2024-10-05 java处理图片与base64编码互相转换
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)