常见内部类的比较

常见内部类的比较,第1张

在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)类中不能出现静态成员

应用场景

多用于作为方法参数或者返回值,然后根据不同的类型,无需产生具体类和对象名,返回不同的实现即可

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/740617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存