zoukankan      html  css  js  c++  java
  • 内部类

    什么是内部类?

    一个类的定义放在另一个类的定义内部,这个类这就是内部类。类名不需要和文件夹相同。


    代码:

    public class Outer {
        public class Inner {
        }
    }

    编译后:

    生成两个.class文件:Outer.class和Outer$Inner.class;因为是两个不同的类,所以内部类的成员变量和方法名可以和外部类相同。

    Outer反编译代码1:

    public class jichu.Outer {
      public jichu.Outer();
    }

    Outer反编译代码2:

    public class Outer
    {
      public class Inner
      {
        public Inner() {}
      }
    }

    Outer$Inner反编译代码1:

    public class jichu.Outer$Inner {
      final jichu.Outer this$0;
      public jichu.Outer$Inner(jichu.Outer);
    }

    Outer$Inner反编译代码2:

    public class Outer$Inner
    {
      public Outer$Inner(Outer paramOuter) {}
    }

    Outer$Inner反编译代码1中:

    final jichu.Outer this$0;

    this$0为外部类的引用。

    public jichu.Outer$Inner(jichu.Outer);

    这是编译器自动生成的构造器,参数为外部类对象,来建立外部类与内部类的联系。 


    内部类的分类

    1、类级内部类(static修饰)、对象级内部类(没有static修饰)。

    2、成员内部类(类中定义),静态内部类(类中定义)、局部内部类(方法中定义),匿名内部类(方法中定义)。


    成员内部类(作为外部类的一个成员存在的类称为成员内部类)

    1、内部类可直接使用外部类的私有成员变量或方法,外部类对内部类是可见的;

    2、外部类中可以创建私有内部类对象。

    3、外部类可通过内部类的对象调用内部类的私有成员变量或方法;

    4、当内部类与外部类有同名成员变量和方法时,内部类可通过Outer.this方式来引用外部类成员。

    5、必须先创建外部类才能创建内部类。

    6、成员内部类不能含有static的变量和方法。因为成员内部类需要先创建外部类,才能创建它自己的。 

    详见成员内部类详解


    局部内部类(定义在方法中的内部类)

    1、内部类不能被public、private、static修饰;

    2、在外部类中不能创建内部类的实例;

    3、创建内部类的实例只能在包含他的方法中;

    4、内部类访问包含他的方法中的变量必须有final修饰;

    5、外部类不能访问局部内部类,只能在方法体中访问局部内部类,且访问必须在内部类定义之后。

    6、可知局部内部类可随意访问外部类的成员变量和方法,即使是私有的。

    7、内部类和外部类有同名变量和方法时,需要通过Outer.this方式来访问外部类成员变量或方法。

    详见局部内部类详解


    静态内部类(有static关键字修饰的内部类)

    1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner();静态内部类不依赖于外部类。

    2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。

    3、静态内部类访问外部类的静态成员变量或方法必须是静态的。

    4、静态内部类中可定义静态的成员变量和方法。

    5、外部类可以创建静态内部类的实例,即使是私有的;并可通过内部类的实例访问内部类的成员变量和方法,即使是私有的。

    详见静态内部类详解


    匿名内部类(没有名字的内部类)

    1、匿名内部类不能定义任何静态成员、方法。

    2、匿名内部类中的方法不能是抽象的;

    3、匿名内部类必须实现接口或抽象父类的所有抽象方法。

    4、匿名内部类不能定义构造器;

    5、匿名内部类访问的外部类成员变量或成员方法必须用static修饰;

    6、内部类可以访问外部类私有变量和方法。

    详见匿名内部类详解

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/SQP51312/p/6086493.html
Copyright © 2011-2022 走看看