网站首页 > java教程 正文
难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.接口嵌套接口
前面我们学习过类嵌套接口,但是呢还没学习过,接口嵌套接口。那么,接口到底能不能嵌套接口呢?我们来试试。
演示:
请定义一个外部接口IOuter,在外部接口IOuter中定义一个嵌套接口IInner。然后定义一个外部类Outer,外部类Outer实现了外部接口IOuter。最后在Main类的main()方法中创建外部类Outer对象。
请观察程序运行结果。
代码:
IOuter接口:
Outer类:
Main类:
结果:
从运行结果来看,接口嵌套接口没有任何问题。
2.接口中的嵌套接口默认就是public static的
定义在接口中的接口默认是public static的。可以省略不写。
我们来试试看是不是这样的。
演示:
请定义一个外部接口IOuter,在外部接口IOuter中定义一个嵌套接口IInner,在嵌套接口IInner中定义一个静态常量。然后定义一个外部类Outer,外部类Outer实现了外部接口IOuter。最后在Main类的main()方法中通过
请观察程序运行结果。
代码:
IOuter接口:
Outer类:
Main类:
结果:
3.外部接口访问嵌套接口成员
接口我们知道,里面可以定义静态常量、抽象方法、默认方法和静态方法。现在将嵌套接口里面也定义上这些。然后让外部接口去直接访问,看看能访问多少。
演示:
请定义一个外部接口IOuter,在外部接口IOuter中定义一个嵌套接口IInner,在嵌套接口IInner中定义一个静态常量、抽象方法、默认方法和静态方法。
然后定义一个外部类Outer,外部类Outer实现了外部接口IOuter。
最后外部接口IOuter在默认方法和静态方法中直接访问嵌套接口中的静态常量、抽象方法、默认方法和静态方法。
在Main类的main()方法中创建外部类Outer对象,调用其默认方法和静态方法。
请观察程序运行结果。
代码:
IOuter接口:
Outer类:
Main类:
结果:
从运行结果来看,程序没有问题。接下来我们来分步骤解释程序运行过程。
首先,从Main类的main()方法开始:
创建了外部类Outer对象,势必就执行了Outer类的构造方法:
执行构造方法时,第一个先被执行的是super()方法,因为没有显式的继承父类,所以先略过。接着执行后面的第一个方法cellDefault()方法:
这个方法是来自于外部接口IOuter中的默认方法:
先显示输出嵌套接口中的静态常量ID,因为外部接口不能直接访问嵌套接口中的成员,只能使用接口名访问静态成员,所以这里使用了嵌套接口名直接调用其静态常量:
与我们结果也是对得上的:
接下来,继续往下执行:
先说明一下这些被注释掉的代码,它们是非静态成员,所以不能被接口名直接访问。要想访问它们可以通过实现接口的类或者匿名内部类。
继续往下执行:
这里呢,就调用了嵌套接口的静态方法,调用结果和我们程序最终执行的结果一致:
至此,我们的cellDefault()方法执行完毕。继续往下执行:
这里我们开始使用嵌套接口名调用其静态方法:
首先执行的是显示输出嵌套接口中的静态常量ID:
执行结果就是:
cellStatic()方法继续往下执行:
这些被注释掉的代码是非静态成员,不能被接口名直接调用。要想调用它们除非创建实现了嵌套接口的实现类或者匿名内部类。接着,我们继续往下执行:
静态方法执行的结果是:
至此,整个程序就执行完毕!
4.嵌套接口访问外部接口成员
上面说完了外部接口访问嵌套接口成员,下面我们来说说嵌套接口访问外部接口成员。
演示:
请定义一个外部接口IOuter,在外部接口IOuter中定义一个嵌套接口IInner和一个静态常量、抽象方法、默认方法和静态方法。
然后定义一个外部类Outer,外部类Outer实现了外部接口IOuter。
最后嵌套接口IInner在默认方法和静态方法中直接访问外部接口IOuter中的静态常量、抽象方法、默认方法和静态方法。
在Main类的main()方法中创建外部类Outer对象,调用其默认方法和静态方法。
请观察程序运行结果。
代码:
IOuter接口:
Outer类:
Main类:
结果:
从运行结果来看,程序完全正确。我们来分析一下程序运行的过程,看看嵌套接口在访问外部接口成员的时候跟外部接口访问嵌套接口成员有何不同。
首先,还是从Main类中的main()方法开始:
创建了外部类Outer对象,也就执行了外部类Outer的构造方法:
在Outer类的构造方法中,最先执行的是cellDefault()方法:
cellDefault()方法调用了嵌套接口的默认方法:
在cellDefault()方法中,我们最先执行的显示输出输出外部接口中的静态常量,注意看,我们没有使用任何前缀就可以直接访问到外部接口里的静态常量:
先说执行结果:
重点:我们没有使用外部接口名来调用这个静态常量,而是直接写的静态常量。这也就意味着,嵌套接口可以直接访问外部类中的成员,但是,仅仅是可以直接访问外部接口中的静态成员,非静态就不行,例如下面执行的代码,这些代码不能直接被调用执行,所以我将其注释起来。要执行它们只能是先创建外部接口的实现类对象或匿名内部类对象:
既然非静态成员不能执行,那么我们再继续往下:
这里调用了外部接口中的静态方法,上面我们说过嵌套接口是可以直接访问外部接口中的静态成员的,所以直接调用即可。其执行结果:
至此,我们的cellDefault()方法整个执行完毕。再开始往下执行我们的cellStatic()方法:
我们可以看到的是外部接口名调用嵌套接口名调用cellStatic()方法,cellStatic()方法是嵌套接口里面的静态方法:
在cellStatic()方法中,最先执行的是显示输出外部接口IOuter中的静态常量ID:
这个直接调用没有问题,前面已经说过,看看执行结果:
cellStatic()方法继续执行:
被注释的代码是非静态成员,没什么好说的,嵌套接口不能直接调用外部接口非静态成员。继续往下执行:
这里就调用了外部接口中的静态方法,因为是静态成员,所以可以直接调用。其执行结果是:
至此,整个程序就执行完毕了!
经过把整个程序分析一遍之后,我们发现外部接口不可以直接嵌套接口里面成员,但是嵌套接口可以直接访问到外部接口静态成员。
总结
- 接口中可以嵌套接口。
- 接口中嵌套接口默认是public static的。
- 外部接口不可以直接访问嵌套接口。
- 嵌套接口可以直接访问外部接口中的静态成员。
至此,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 Spring Boot图片文件转Base64(springboot 图片文件转base64)
- 2024-10-05 “全栈2019”Java第八十五章:实现接口中的嵌套接口
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)