JAVA内部类总结
来源:互联网 发布:oracle创建数据库用户 编辑:程序博客网 时间:2024/06/07 02:17
内部类就是定义在另一个类中的类,看以下代码中内部类定义:
- public class OuterClass
- {
- private String str1="abc";
- public void start1()
- {
- InnerClass inner=new InnerClass();
- inner.doing();//调用内部类私有方法
- System.out.println("外围类访问内部类私有变量:"+inner.aString);
- }
- //内部类
- class InnerClass{
- private String aString=str1+" addinnerclass";
- private void doing()
- {
- System.out.println("内部类访问外围类私有域:"+aString);
- }
- }
- }
那么内部类有什么特点呢?
1、内部类方法可以访问该类定义所在作用域中的数据,包括私有数据。以上代码可以看出内部类可以直接使用它所在外部类的私有成员
2、内部类可以对同一包下的其它类隐藏
3、定义回调函数而又不想编写太多代码时使用匿名内部类比较便捷
Java中内部类可以分为四种普通内部类、局部内部类、匿名内部类和静态内部类。上面代码是属于普通内部类定义。
普通内部类
普通内部类定义如上面代码。上面代码可以看出跟普通类相比内部类具有访问拥有特权,它可以访问外围类私有成员,而外围类也可以访问它的私有成员包括私有方法。
那么其他类是否能实例化一个类的内部类呢?答案是可以的,只是语法有点奇怪,看代码:
- public class InnerTest
- {
- public InnerTest()
- {
- //其他类实例化内部类,先实例化它的外围类
- OuterClass outerClass=new OuterClass();
- OuterClass.InnerClass innerClass=outerClass.new InnerClass();
- }
- }
很显然,这里内部类的访问修饰符不能是private,否则其他类无权访问自然也不能实例化了。同样其他类实例化内部类后是没有权限访问它的私有数据域的,只能把它当作普通类来用。
静态内部类
将普通内部类声明为static就成了静态内部类(注意只有内部类前可以加static),它的特点是不能够访问外围类。通常静态内部类只是为了把一个类隐藏在另一个类的内部,不需要引用外围类对象。如果一个内部类声明在接口中那它会自动成为public静态内部类。
局部内部类
局部内部类是定义在方法中的类。局部内部类不能使用public或private修饰,它的作用域只限定在所定义的方法块内,即使外围类也不能访问它,它完全对外隐藏了。局部内部类可以访问外围类的私有变量,对于本方法内数据只能访问final修饰的变量。
- public void start2(final String param)
- {
- class partialInnerClass
- {
- private void doing()
- {
- System.out.println("局部内部类可以访问外围内变量"+str1);
- System.out.println("局部内部类只能访问本方法内final变量"+param);
- }
- }
- partialInnerClass pInnerClass=new partialInnerClass();
- pInnerClass.doing();
- }
匿名内部类
先看定义代码:
- public void start3()
- {
- //匿名内部类
- Runnable thread=new Runnable()
- {
- @Override
- public void run()
- {
- System.out.println(str1);
- }
- };
- Thread run=new Thread(thread);
- run.start();
- }
定义语法格式
new SuperType(construction parameters)
{
//override superType method
//inner class methods and data
}
匿名内部类没有类名但需要实现接口或继承类,因为没有类名所有它也没有构造函数,需要参数只能从父类构造器接收了
0 0
- java内部类总结
- Java内部类总结
- java内部类总结
- java内部类总结
- java内部类总结
- Java内部类总结
- java内部类总结
- Java内部类总结
- Java内部类总结
- Java内部类总结
- Java内部类总结
- Java内部类总结
- Java内部类总结
- Java内部类总结
- Java内部类总结
- java内部类总结
- java 内部类总结
- Java内部类总结
- 便携与智能:医疗行业迎来全新拐点
- 学习笔记-cmake
- Chrome.storage和HTML5中localStorage的差异
- 『动易』栏目列表页的子栏目如何显示成一列式或多列式
- JavaWeb 安全问题及解决方案
- JAVA内部类总结
- oracle中exp,imp的使用详解
- 十个有用的Sass Mixins
- SUSE 发布亚马逊网络服务测试驱动
- 导演,场景,层,精灵
- java三步 在线生成图形报表-maven-jfreechat
- javascript实现动态添加和删除文件上传选项
- C++多线程编程入门之经典实例
- K/3Cloud二次开发基于WebDev附加进程调试