前言
前面基本上对内部类有一个认识了,内部类可以分为四种:
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
成员内部类
特征:
- 声明在类内部,方法外部
- 没有static修饰
- 不能包含静态属性和静态方法(静态常量除外,final static int i = 0;)
- 在拥有外部类对象之前是不能拥有内部类对象的
- 在外部类对象创建内部类的同时,内部类自动拥有一个外部类的引用,可以访问外部类对象的所有成员,包括private
- 外部类无法访问直接访问成员内部类的方法和属性,需要通过内部类的一个实例来访问
- 创建的格式如下,必须通过外部类对象.new的方式进行创建
Animal.Bird bird = new Animal().new Bird();
- 编译后的文件为Animal.class和Animal$Bird.class
静态内部类
特征:
- 声明在类内部,方法外部
- 有static修饰
- 只能访问外部类的静态成员属性或静态访问
- 创建格式如下,无需外部类的实例对象即可创建
Animal.Fish fish = new Animal.Fish();
局部内部类
特征:
- 存在于方法的作用域内
- 不能使用权限访问修饰符进行修饰
- 不是外围类的一部分
- 可以访问当前代码块里面的常量(在jdk1.8之后限制有所放宽,可以访问代码里面“形式上不变的变量--初始化之后不再改变的变量”)
- 可以访问外围类的所有成员(static和非static都可以访问)
匿名内部类
特征:
- 没有名字的局部内部类
- 因为没有名字,所以只能使用一次,创建实例后,类的定义就会消失
- 必须继承一个类或者实现一个接口
- 没有构造方法,因为没有类名,拥有与父类相同的所有构造方法
- 可以定义代码块,但是不能定义静态代码块
内部类进阶
内部类为什么存在
关于内部类的详细文章可以参考目录 [smxknife's Java内部类]
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦