在Java中,程序是由类构建而成的,而在一个内部也可以声明类,我们把这样的类叫做内部类,包裹内部的类我们称为外部类
特点:
1.内部类定义为public时可以与文件名不同
2.内部类一旦编译成功,会成为完全不同的类,外部类名.class和外部类名$内部类名.class两种
3.内部类可以通过private修饰
4.通过内部类可以更好的体现封装以及代码编写的灵活性
4.1 当我们将内部类声明为private时,只有外部类可以访问,很好的隐藏了内部类
4.2 内部类可以继承或实现其他的类或者接口,而不受外部类的影响
4.3 内部类可以直接访问外部类的字段和方法,即使是用private修饰的。而外部类不能直接访问内部类的成员
分类:
常见的有成员内部类,方法内部类,静态内部类以及匿名内部类
成员内部类语法特点:
1)定义在类内部,可以看成是外部类的一个成员
2)在成员内部类中无法声明静态属性和方法
3)内部类的访问修饰符可以任意,但是访问范围会受到影响
4)内部类可以直接访问外部类的成员;如果出现同名的属性或方法,会优先访问内部类中的
5)可以使用外部类.this.成员方式,访问外部类中同名的信息
应用场景
当两个类彼此之间需要访问,且对其中某一个类的限制较高,可以将此类设置另一个类的成员内部类
方法内部类语法特点:
1)定义在方法内部,作用范围限定在方法内,也叫做局部内部类
2)和方法内部成员的使用规则一样,class前面可以不添加public,private,protected,static
3)类中不能包含静态成员
4)类中可以包含final abstract修饰的成员
5)类中普通方法如果需要访问外部方法的局部变量,则变量也需定义为final(默认会使用final修饰)
应用场景
由于类对象只能在当前方法或者代码块中创建,使用,相当于一次性产品,使用场景较少
静态内部类语法特点
1)由static修饰的内部类,也成为嵌套内部类,无需依赖外部类对象构建实例
2)静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例
3)可以通过外部类.内部类.静态成员的方式,访问北部类中的静态成员(外部类.内部类.静态成员 记得有 . 符号)
4)当内部类属性与外部类属性同名时,默认直接调用内部类中的成员
5)如果需要访问外部类中的静态属性,则可以通过外部类.属性的方式
6)如果需要访问外部类中的非静态属性,则可以通过new 外部类().属性的方式
应用场景:
当类A需要使用类B,而B并不需要直接访问外部类A的成员变量和方法时,可以将B作为A的静态内部类
匿名内部类语法特点
1)匿名内部类没有类名,没有class关键字,也无法产生具体实例对象名
2)必须继承或实现一个接口,指定给new的类型为匿名类的父类或父接口,但不能显示的extends或implements子句
3)无法使用private,public,protecter,abstract,static修饰
4)无法编写构造方法,可以一俺家构造代码块
5)类中不能出现静态成员
应用场景
多用于作为方法参数或者返回值,然后根据不同的类型,无需产生具体类和对象名,返回不同的实现即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)