分析内部类------------【Java基础】

内部类,就是在已存在的类中再定义class;

注:这个不能被public修饰,但是允许拥有private和protect权限;

 

至于它存在的理由嘛,是因为它:

隐藏性好(修饰符),可实现多重继承(继承一个与外部类无关的类,保证了内部类的独立性),还可以避免修改接口而实现同一个类中两种同名方法的调用和拥有外部类所有元素的访问权限(无论是在类、方法或者区域块中都可以可以访问外围的成员和元素,而不需要任何特殊条件;当然外围也可以通过创建内部类对象访问内部类的成员和元素;。。。

 

参考博文:内部类解读

 

 

内部类还是有区分的,比如没有用static修饰的普通的内部类,就像外部类的属性和方法一样的类,就称为成员内部类;带有static修饰符的就称为静态内部类;在方法体或语句块(包括方法、构造方法、局部块或静态初始化块)内部定义的类称局部内部类;某个类的实例只用一次,还可以将类的定义和类的创建放到一起完成,就称为匿名内部类。。。

这就是我了解到的几个内部类;以上就是它们创建位置和语法的区别了。

 

 

分开来讲下这四个内部类。

成员内部类

它具有无条件访问外部类的所有成员属性和成员方法;而且如果内部类有和外部类同名的方法时,默认访问成员内部类的成员;

使用的话:

  1. 内部类访问外部类的成员;???——》则需要该“ 外部类.this.成员变量外部类.this.成员方法 ”的形式进行访问;
  2. 外部类访问内部类的成员;???——》必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问;

注:构建内部类的实例,必须保证外部类的实例先存在:

 

静态内部类

因为使用static,所以在JVM初始化的时候,它就比非static的类更先初始化;因此它不依赖于外部类

因为比其他的类先,所以不能使用外部类的非static成员变量或方法;

而且完成初始化之后不能直接访问外部类的实例变量,只能通过对象引用才能访问;

 

局部内部类

因为范围的缘故,它只在方法体中有效,在方法体外不能创建局部内部类的对象;就好比局部变量、成员变量这样使用范围来区分的;

所以方法中定义局部内部类和定义局部变量一样,不能使用private、protected、public等访问修饰符,也不能使用static修饰;但可以使用final和abstract修饰

另外方法中的内部类可以访问外部类成员,但对于方法的参数和局部变量,必须有final修饰才可以访问;static方法中定义的内部类可以访问外部类定义的static成员;

 

 

匿名内部类

它仅能创建一个类的实例,所以常在编写监听事件的代码时常用到(方便和利于维护),另外它同局部内部类一样,也不能用static修饰;

而且在编译时它会被系统自动创建一个新的.class文件,并被自动起名“父类名$子类名”;

注:匿名内部类是唯一没有构造器的类;(所以常用于接口回调)

 

参考博文:Java基础8:深入理解内部类

    原文作者:YHJ
    原文地址: https://blog.csdn.net/weixin_40918067/article/details/82259218
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞