Java中的各种内部类

内部类,外部类,其他外部类。内部类写在外部类中

内部类:定义在一个类中;
1.内部类可以直接访问其所在类中的成员,包括私有,不必创建外部类对象。
    为什么能直接访问哪?
是因为内部类在访问外部类成员时,持有了一个外部类的引用,格式:外部类名.this
2.外部类要访问内部类,必须建立内部类对象。
内部类名 对象名 = new 内部类名()

怎么在其它外部类中直接访问内部类中的成员?

建立内部类对象
外部类名.内部类名 对象名  = new 外部类名().new 内部类名()
对象.内部类成员
(用的比较少,面试可能会遇到)

因为内部类在外部类的成员位置上,所以内部类可以被成员修饰符修饰。
比如,1.private,将内部类在外部类中进行封装。
      2.static  用此修饰符时,内部类就具备了static的特性。

静态内部类

当内部类被static修饰后,只能访问外部类中的static成员,出现了访问局限

什么时候用到静态内部类?
当外部类所有成员都是公共属性的时候。

怎么在外部类中访问静态内部类中的非静态成员或者方法?
一般静态成员都可以通过类名访问。所以,可以通过外部类名访问内部静态类,建立一个静态内部类对象来访问。
new 外部类名.内部类名().成员方法

注意:当内部类中定义了静态成员,该内部类必须是被static修饰的。
当外部类中的静态方法访问内部类的方法时,内部类也必须是static修饰的

什么时候用到内部类?
当描述事物时,事物的内部还有事物,该事物用内部类描述。
因为内部事物在使用外部事物的内容。、

比如,描述人体,人体有心肝脾肺肾等复杂的个体。
多个个体又有自己的功能。
比如心脏,属于人体内的一部分,并且心脏会访问人体内的其他器官。
如果把心脏类定义在人体外,心脏访问人体内的其他器官还需要建立人体对象
所以把心脏类放到人体类中,并可以私有一下,只有人体内的方法才能访问。
并可以设置对人体外的接口。代码才能最优。

注意:以上说的都是把内部类定义在了外部类的成员位置上。

内部类也可以定义在外部类的方法中,叫做局部内部类,访问规则没有变,还是可以访问
外部类中的成员。因为还持有外部类的引用。
局限性:
1.局部内部类不能被static修饰了,因为static只能修饰成员,不能修饰局部。
所以局部内部类也不能定义静态方法。
2.不可以访问它所在的方法中的常规变量。只能访问其所在方法中被finall修饰的局部变量。

匿名内部类:
目的 :简化书写,覆盖方法

1.匿名内部类其实就是内部类的简写格式。
只要是简化,都会有前提,也会有其好处和弊端。
前提:
内部类要实现匿名,此内部类必须继承一个类,或者是实现接口。

3.内部类的格式:  new 父类或者接口(){ 定义子类的内容}
4.其实匿名内部类就是一个匿名子类对象。

5.匿名内部类中定义的方法最好不超过3个 
 

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