学习java过程之内部类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录



前言

在Java开发中,内部类的使用是十分常见的,特别是内部类中的匿名内部类是重点。


一、内部类是什么?

        内部类是类的五大成员之一,五大成员分别为:属性、方法、构造器、代码块、内部类。

内部类作为外部类的成员,是可以直接访问外部类的所有成员变量和方法。如果是静态内部类,那么它只能访问外部类的静态变量和静态方法。这和静态方法调用的内容是差不多的。


二、内部类的有哪些?

1、局部内部类

        局部内部类的细节:

                (1)它是在外部类的方法和代码块中定义的。

                (2)可以直接访问外部类的所有成员变量和方法

                (3)它可以在它所在的作用域内被创建对象。

                (4)它的作用域是在定义它的方法或代码块中。

                (5)它不能被外部类其他类拿来使用,但它可以通过外部类的方法来使用这个内部类。

                                外部其他类-----> 外部类 ----> 外部类的方法----->内部类

              (6)如果内部类和外部类的成员变量或方法重名的时候,如果内部类想条用外部类的成员或方法。调用的语句时:外部类类名.this.成员变量/成员方法。

2、匿名内部类!!!

        匿名内部类的细节

                (1)它同样是在外部类的方法和代码块中定义的。

                (2)可以直接访问外部类的所有成员变量和方法

                (3)它可以分为基于接口的匿名内部类 和 基于类的匿名内部类。

                         它本质是类,也是对象。

                         (I)基本语法

                             接口/类.suibian = new 接口/类(){重写接口的抽象方法};

                          (II)为什么说它是对象呢?因为它可以用如下方式调用方法。

                                       new 接口名/类名(){

                                        重写  }. 方法名();

                 (4)匿名内部类是没有访问修饰符的!!!

                 (5)外部其他类是没有办法调用匿名内部类的。

                 (6)如果外部类和内部成员或方法重名时,采取就近原则,如果内部想用外部类的                                 成员变量或方法语句是:外部类.this.变量/方法名.(有点疑问)

                           外部类想调用内部类的成员,如(II)这种方法。

            !!!由于匿名内部类也是一个对象,在java开发中它经常被当作实参传递。

3、成员内部类

        说明:成员内部类是定义在外部类的成员位置,并且没有static修饰

        (1)本质就是一个成员--->可以直接访问本类中的所有成员。

        (2)它可以在外部其他类中创建成员内部类对象,也可以在外部类的方法中创建对象,

               外部其他类创建对象的方式:有两种

                第一种,先创建好外部类对象,然后用new 这个对象.成员内部类。

                外部类名.内部类名. suibian = new 外部类对象名.内部类名();

                第二种:在外部类中,先定义一个方法f1()返回内部类对象,然后

                用外部类名.内部类名.suibian 去接收这个方法。

                即:外部类名.内部类名. suibian = 外部类对象名.f1()

        (2)可以添加任意修饰符(public- private)跟匿名对象完全不同.

          (3)   作用域和外部类的成员一样在整个外部类中。

        (4)如果外部类想调用内部类的方法,先在外部类中创建一共内部类的对象,然后再调用                     它的方法。

         (5)外部类和成员内部类重名时,就近原则。

                内部类想用外部类的成员,类名.成员名.

4、静态内部类。
​​​​​​​

静态内部类--->就是个成员

静态内部类是在来类的成员位置上定义的并用static修饰

细节:

1、定义:任意访问修饰符(public --private)static 类名

2、可以在外部类其他类创建对象

        第一种方式

                外部类名.内部类名 suibian = New 外部类对象名.静态内部类

        第二种方式与普通内部类一样:

                首先:在内部类创建一个方法返回一个静态内部类对象。

                然后:在 外部其他类中来接收就型

 外部类名.内部类名 suibian = 外部类对象名.方法名();

  1. 内部类访问外部类的成员是直接访问静态成员
  2. 如果静态内部类和外部类重名的时候,如果想调用外部类的成员,
    外部类名.静态成员名.
  3. 静态内部类的作用域,是整个外部类中。

           

        



总结

在方法区和代码中定义的类有:局部内部类和匿名内部类--->没有办法被外部类其他类创建对象的。

在成员地方定义的内部类有:成员内部类 和 静态内部类

猜你喜欢

转载自blog.csdn.net/m0_62452821/article/details/121916814