1.成员内部类
2.静态内部类
3.局部内部类
4.匿名内部类
什么是内部类 概念:在一个类的内部再定义一个完整的类
class Body{ class Head{ } }//head属于body的一部分特点:
1.编译之后内部类可生成独立的字节码文件
2.内部类可以直接访问外部类的私有成员,不破外外部类的封装性
3.可为外部类提供必要的内部功能组件(body和head)
成员内部类在类的内部定义,与实例变量、实例方法同级别的类
(与类中的变量,方法是一个级别的,也可以添加,define,protected,private,public这些修饰符,不过只能有一个public修饰的内部类)
作为外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象(先创建外部类对象,然后创建内部类对象)
外部类类名.内部类类名 内部类对象名 = 外部类对象名.new 内部类类名();
简单创建对象的方法:
Outer11.Inner1 c = new Outer11().new Inner1();
外部类类名.内部类类名 内部类对象 = new 外部类类名().new 内部类类名();
注意:1.当内部类和外部类有重名的属性的时候,会优先访问内部类属性
在这种情况下想调用外部类的属性,需要在调用的外部类的属性前加上 外部类类名.this.前缀
System.out.println(Outer.this.name);
2.成员内部类,不能定义静态成员
可以包含静态常量
静态内部类不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员(相当于一个外部类)
作用:给外部类提供一些功能
局部内部类
和局部变量一样,定义在方法中,作用范围是外部类的方法,和局部变量是一个级别的
如果想调用局部内部类中的方法show2,需要在方法中创建对象,然后调用外部类的show方法
访问局部变量,这个变量必须是常量fianl 在JDK1.7以前,在JDK1.8以后自动添加了fianl
局部内部类中也不能使用静态变量,但是可以使用静态常量
匿名内部类没有类名的局部内部类(一切特征和局部内部类相同)
必须继承一个父类或者一个接口
局部内部类只使用一次,就不再使用了,所以为了简化局部内部类的写法,有了匿名内部类
这里是局部内部类的使用方法
这里是匿名内部类的使用方法
定义类,实现类,创建对象的语法合并,只能创建一个该类的对象
匿名内部类是有名字的,只不过是JDK自动生成的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)