内部类详解

目录

     内部类详解

   1、有名内部类

          (1)、非静态

          (2)、静态

   2、匿名内部类

          (1)、非静态

          (2)、静态

   3、内部类定义范围和作用域

          (1)、非静态

          (2)、静态

   4、内部类特点      

   5、Lambda表达式



   1、有名内部类

          (1)、非静态

                    内部类详解

              非静态有名内部类调用其内部属性和方法时和普通类类似,但是必须先创建外部类对象之后才可以使用。  

          (2)、静态

                       内部类详解

             静态有名内部类的使用分为两种情况,若没有跨类则可以直接使用内部类类名,若跨类则必须时外部类类名.内部类类名。  

   2、匿名内部类

  •    匿名内部类由于没有类名而不能单独存在,定义匿名内部类的同时须直接实例化该类,其语法格式如下:

           new 父类构造器([参数列表])|接口(){   

           //匿名内部类类体

        }

          (1)、非静态

                   1. 普通类:普通类匿名内部类实质为普通类的子类

                      内部类详解

                   2. 抽象类:抽象类匿名内部类实质为抽象类的子类

                      内部类详解

                   3. 接口:接口匿名内部类实质为接口的实现类。

                      内部类详解

                4.匿名内部类特点:

                    匿名内部类一定是接口的实现类(该实现类仅能实现一个接口)或类(普通类或抽象类)的子类;

                    匿名内部类不能有构造方法,但是可以通过非静态代码块初始化成员变量;

                    匿名内部类一定不能是抽象类;

                    可以在匿名内部类中添加新的属性和方法,但是这些属性和方法不能被上转型对象所调用,只能被非上转型对象方               式创建的匿名内部类对象所调用,例如:

                    内部类详解       

 

          (2)、静态

                        静态匿名内部类即在非静态匿名内部类声明时前面加上Static修饰,与非静态的区别会在下面讲述。

                                                  内部类详解

   3、内部类定义范围和作用域

          (1)、非静态

  •                 可以定义在外部类的全局属性中,也可以定义在外部类的所有方法中,作用范围和普通的变量定义一样。

          (2)、静态

  •                 注意:如果为static内部类只能直接定义在外部类中。
  •                 静态内部类仅能直接访问外部类的静态成员变量和方法,可以通过创建外部类的对象间接使用非静态的成员变量和方法。
  • 内部类详解
  •                 在非外部类中定义的内部类和局部变量一样,其使用范围从定义的位置开始到其所在直接语句块结束。
  •                 只有有名静态内部类中才允许有静态成员(静态属性、静态代码块和静态方法)。
  • 内部类详解

   4、内部类特点      

  • 内部类是一个独立的类编译之后内部类会被编译成独立的.class文件,如果该内部类为有名内部类,则有名内部类字节码文件名为外部类的类名+$+内部类类名;如果为匿名内部类,则匿名内部类字节码文件名为外部类的类名+$+数字;
  • 普通外部类、抽象类和接口可以有内部类(匿名的或有名的);
  • 内部类可以直接定义在类中,也可以定义在方法或代码块中;其中直接定义在外部类中的内部类可以有publicprotected、默认的和private四种访问权限修饰(普通外部类、接口和抽象类只能使用publicdefault修饰),也可以使用static修饰( static不能修饰普通外部类、接口和抽象类);但是定义在方法或代码块中的内部类不能有访问修饰符修饰,也不能有static修饰。
  • 内部类可以访问外部类的所有访问权限的成员变量。
  • 在局部变量作用的范围内,如果定义的内部类需要使用该局部变量,则该变量必须有final修饰。      
  • 注意:从 Java 8开始,如果定义的内部类需要使用该局部变量,则该变量可以使用final修饰。

   5、Lambda表达式

                                     内部类详解

 

                                    内部类详解

                                    内部类详解 

                                    内部类详解 

                注:lambda表达式在Java8中有更新的用法,十分简洁,需要了解的话请参见Java核心卷1。

相关文章:

  • 2021-07-12
  • 2022-12-23
  • 2021-12-04
  • 2021-09-10
  • 2021-11-24
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-31
相关资源
相似解决方案