内部类的使用1--隐藏实现
2010-11-29 22:03
197 查看
内部类的声明和调用语法
。
内部类就是声明在其他类的内部的类。
类中使用内部类,跟使用其他类没有什么不同。内部类作为一个成员跟其他变量也非常相像,能用final修饰,能访问其外部的变量等。
在类外面创建一个外部类的实例时有两种方式。非静态时A.B ab = new A().new B()。静态的 A.B AB = A.new B();而通常情况下我们不会直接来new 这个类而是外部类提供一个方法给我们得到内部类的实例。
另外一种使用办法是,你做了一件比较复杂的事情,但是又不想被人知道就可以使用内部类。
开发不依赖类型的代码,隐藏细节
有了内部类,就能够更好的实现封装代码的细节部分,比如有一个公用的接口,而使用私有内部类来实现这个接口,再通过外部类的方法返回接口的一个实例。
这样就使的,客户程序员只能使用引用来进行开发,阻碍了任何依赖于类型的代码,并完全隐藏了实现的细节。
例如:
方法或者作用域中的内部类
上面的代码除了把内部类声明在成员变量的位置外,还能直接声明在方法的内部,例如:
匿名内部类
像上面这种声明在方法内部的类,类名是没有作用的,因此有了声明匿名内部类的方法:
把return 和new 构造器卸载了一起,表示得到一个继承了Driver的实例。
这种用法最常见的就是在SWING图形见面开发的时候来定义事件监听器。
如果匿名内部类继承的类是有构造器参数的话,需要用return new Driver(param)来进行声明。
内部类使用外部类的变量
如果方法内的内部类(包括匿名内部类),需要直接使用其外面的变量(不包括构造器使用)则需要保证外部的变量为final类型的,否则会有编译错误。
。
内部类就是声明在其他类的内部的类。
类中使用内部类,跟使用其他类没有什么不同。内部类作为一个成员跟其他变量也非常相像,能用final修饰,能访问其外部的变量等。
在类外面创建一个外部类的实例时有两种方式。非静态时A.B ab = new A().new B()。静态的 A.B AB = A.new B();而通常情况下我们不会直接来new 这个类而是外部类提供一个方法给我们得到内部类的实例。
另外一种使用办法是,你做了一件比较复杂的事情,但是又不想被人知道就可以使用内部类。
开发不依赖类型的代码,隐藏细节
有了内部类,就能够更好的实现封装代码的细节部分,比如有一个公用的接口,而使用私有内部类来实现这个接口,再通过外部类的方法返回接口的一个实例。
这样就使的,客户程序员只能使用引用来进行开发,阻碍了任何依赖于类型的代码,并完全隐藏了实现的细节。
例如:
]interface Driver{ String getName(); }; public class Bus { private class Driver1 implements Driver{ private String name = "Driver1"; public String getName() { return name; } } Driver getDriver(){ return new Driver1(); } public static void main(String[] args) { Driver driver1 = new Bus().getDriver(); System.out.println(driver1.getName()); } }
方法或者作用域中的内部类
上面的代码除了把内部类声明在成员变量的位置外,还能直接声明在方法的内部,例如:
]interface Driver{ String getName(); }; public class Bus { Driver getDriver(){ class Driver1 implements Driver{ private String name = "Driver1"; public String getName() { return name; } } return new Driver1(); } public static void main(String[] args) { Driver driver1 = new Bus().getDriver(); System.out.println(driver1.getName()); } }
匿名内部类
像上面这种声明在方法内部的类,类名是没有作用的,因此有了声明匿名内部类的方法:
]public class Bus { Driver getDriver(){ return new Driver(){ private String name = "Driver1"; public String getName() { return name; } }; } public static void main(String[] args) { Driver driver1 = new Bus().getDriver(); System.out.println(driver1.getName()); } }
把return 和new 构造器卸载了一起,表示得到一个继承了Driver的实例。
这种用法最常见的就是在SWING图形见面开发的时候来定义事件监听器。
如果匿名内部类继承的类是有构造器参数的话,需要用return new Driver(param)来进行声明。
内部类使用外部类的变量
如果方法内的内部类(包括匿名内部类),需要直接使用其外面的变量(不包括构造器使用)则需要保证外部的变量为final类型的,否则会有编译错误。
相关文章推荐
- 使用内部类隐藏实现细节
- 使用属性动画以及自定义view实现图片的显示与隐藏
- [Android]使用Linux命令实现隐藏显示应用功能
- 使用jquery实现点击按钮弹出层和点击空白处隐藏层
- 使用属性动画以及自定义view实现图片的显示与隐藏
- 编写高质量OC代码52建议总结:27.使用“class-continuation 分类” 隐藏实现细节
- 使用php实现隐藏文件实际位置的文件下载
- 使用隐藏的iframe 隐藏form提交,仿AJax无刷新提交,可以实现无刷新上传文件
- 使用android隐藏api实现亮度调节
- 使用Javascript实现点击链接后,隐藏该链接
- 今天和大家讲一下按钮怎么实现和隐藏,Visibility的使用
- 炫酷:一句代码实现标题栏、导航栏滑动隐藏。ByeBurger库的使用和实现
- Java:使用内部类实现类的多重继承
- 用js实现控件的隐藏及style.visibility的使用
- 使用text-overflow对表格中的数据进行隐藏,却不能实现
- Android 使用jQuery实现item点击显示或隐藏的特效的示例
- 使用android隐藏api实现亮度调节
- 炫酷:一句代码实现标题栏、导航栏滑动隐藏。ByeBurger库的使用和实现
- bat批处理彻底隐藏文件的方法(使用虚拟磁盘实现)
- 使用隐藏的iframe 隐藏form提交,仿AJax无刷新提交,可以实现无刷新上传文件