李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
内部类与向上转型
Leefs
2019-11-04 PM
7957℃
7条
# 内部类与向上转型 ### 前言 当将内部类向上转型为其基类,尤其是转型为一个`接口`的时候,内部类就有了用武之地。这是因为此内部类--某个接口的实现--能够完全不可见,并且不可用。 **所得到的只是指向基类或接口的引用,所以能够很方便地隐藏实现细节。** ### 探讨 下面我们通过一段代码来对内部类与向上转型做一个更好的理解: ```java //客户端程序员可用的接口 interface Destination { String readLabel(); } //客户端程序员可用的接口 interface Contents { int value(); } class Parcel4 { //内部类私有化 private class PContents implements Contents{ private int i = 11; //实现接口中的方法 @Override public int value() { return i; } } protected class PDestination implements Destination { private String label; private PDestination(String whereTo) { label = whereTo; } //实现接口中的方法 @Override public String readLabel() { return label; } } //外部类的方法,暴露内部类的对象 public Destination destination(String s) { return new PDestination(s); } //外部类的方法,暴露内部类的对象 public Contents contents() { return new PContents(); } } public class TestParcel { public static void main(String[] args) { Parcel4 p = new Parcel4(); Contents c = p.contents(); Destination d = p.destination("Tasmania"); // 不能访问私有类 //! Parcel4.PContents pc = p.new PContents(); } } ``` > 代码分析 1. 1.`Contents`和`Destination`表示客户端程序员可用的接口。(接口的所有成员自动被设置为public的。) 2. 2.`Parcel4`是外部类,其中有两个方法`destination()`和`contents()` + `destination()`方法返回一个`PDestination`对象,用于暴露内部类`PDestination`的对象 + `contents()`方法返回一个`PContents`对象,用于暴露内部类`PContents`的对象 3. 3.内部类`PContents`是private,除了`Parcel4`,没有人能访问它。 4. 4.内部类`PDestination`是protected,所以只有`Parcel4`及其子类、还有与`Parcel4`同一个包中的类能访问`PDestination`,其他类不能访问`PDestination`。 此时,客户端程序员想了解或访问这些成员,那是要受到限制的。 5. 5.主函数中创建`Parcel4`对象,分别调用对象中的两个方法。 ### 总结 代码中,private内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节。此外,从客户端程序员的角度看,由于不能访问任何新增加的、原本不属于公共接口的方法,所以扩展接口是没有价值的。这也给Java编译器提供了生成更高效代码的机会。
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/125.html
上一篇
SpringBoot整合Thymeleaf
下一篇
Thymeleaf表达式讲解(一)
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Nacos
栈
机器学习
二叉树
数学
Filter
Jquery
数据结构
Python
Http
FileBeat
序列化和反序列化
DataX
SpringBoot
BurpSuite
Java
Spark RDD
哈希表
MyBatis
Map
SpringCloudAlibaba
容器深入研究
Azkaban
Eclipse
GET和POST
Ubuntu
查找
FastDFS
Thymeleaf
Java编程思想
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭