java内部类
来源:互联网 发布:淘宝手机配件货源 编辑:程序博客网 时间:2024/06/03 22:31
1、作用
(1)更好的封装性,不允许同一个包里的其他类访问该类;
(2)内部类成员可以直接访问外部类的私有数据,但是外部类不可以访问内部类的实现细节;
(3)匿名内部类适合用于创建那些仅需要一次使用的类;
2、区别
(1)内部类比外部类可以多使用三个修饰符:private、protected、static——外部类不可以使用这三个;(外部类只有包访问权限和公开访问权限)
(2)非静态内部类不能拥有静态成员变量、静态方法和静态初始快;静态内部类都可以包含。
非静态内部类:
在非静态内部类中,内部类成员可以直接访问外部类的私有数据,这是因为在非静态内部类对象中,保存了一个它所寄生的外部类对象的引用(当调用非静态内部类的实例方法时,必须有一个非静态内部类实例,非静态内部类实例必须寄生在外部类实例里)。
(如果外部类需要访问非静态内部类成员,则必须显式创建非静态内部类对象来调用访问其实例成员)。
不允许在外部类的静态成员中直接使用非静态内部类。
静态内部类:
用static修饰,则这个内部类是属于外部类本身。静态内部类不能访问外部类的实例成员,只能访问类成员。
外部类还是不能直接访问静态内部类的成员,但可以使用静态内部类的类名作为调用者访问静态内部类的类成员,或者使用静态内部类对象作为调用者来访问静态内部类的实例成员。
使用内部类:
(1)在外部类内部使用内部类:和平常使用普通类差不多,注意不要在外部类的静态成员中使用费静态内部类,因为静态成员不能访问非静态成员。
(2)在外部类外使用非静态内部类:如果希望在外部类外使用,则a.内部类不能使用private修饰;b.由于非静态内部类对象必须寄生在外部类的对象中,则在创建非静态内部类对象之前,必须先创建其外部类对象:OutInstance.new InnerConstructor();(Out.In in= new Out().new In();)。
(3)在外部类外使用静态内部类:静态内部类和外部类是类相关的,所以在创建静态内部类对象时无须创建外部类对象,只需使用外部类即可调用构造器:StaticOut StaticIn in=new StaticOut.StaticIn();
(2)(3)得出结论:应该优先考虑使用静态内部类。
局部内部类:(很少使用,比较鸡肋)
在方法内定义,仅在方法内有效,局部内部类不能使用访问控制符和static修饰符修饰。
匿名内部类:(java 8改进的)
(1)不能是抽象类;因为创建匿名内部类时,会立即创建匿名内部类对象。
(2)不能定义构造器;匿名内部类没有类名,所以无法定义构造器,但是可以定义初始化块。
(3)当通过实现接口来创建匿名内部类,匿名内部类也不能显示创建构造器,因此匿名内部类只有一个隐式的无参数构造器,故new接口名后的括号里不能传入参数值。
(4)当通过继承父类来创建匿名内部类,匿名内部类拥有和父类相似的构造器,此处的相似是拥有相同的形参列表。
(5)在java 8之前要求匿名内部类的局部变量要用final修饰,但是java 8之后若没有使用修饰,就相当于使用了final修饰。
阅读全文
0 0
- 【Java】【内部类】Java 内部类简介
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java内部类--局部内部类
- Java 内部类以及匿名内部类
- JSP中的include的两种用法
- 文章标题
- 五月份实习总结
- android RIL源码研究
- 设计模式读书笔记-----状态模式
- java内部类
- Invert a binary tree.
- CSS文字属性与选择器
- 基于Java Bouncy Castle的PGP加密解密示例
- 几个精致的web UI框架
- SybaseASE系统表的应用
- 操作
- MySQL数据库通过字段名来搜索相应的表
- [iOS 给View 添加虚线框] CAShapeLayer 绘制