美文网首页
Java内部类机制

Java内部类机制

作者: 阳光下的狐狸 | 来源:发表于2017-02-23 09:46 被阅读0次
    内部类的种类

    成员内部类
    方法内部类
    匿名内部类
    静态内部类
    局部内部类

    所谓内部类,是指在一个类的内部还有另外一个类的定义. 在Java中,可以在类的内部定义内部类, 也可以在方法内部定义一个类.
    在方法体内定义内部类, 有需要注意的地方就是: 在方法体内定义的内部类,可以访问外部类的任意属性,但是不能直接访问方法中的参数变量.
    如果需要让内部类访问方法的参数变量,需要在方法参数前加上"final"关键字.
    使用内部类的优缺点是:
    (1)优点: 使用内部类可以直接访问外部类的私有属性;
    (2)缺点: 含有内部类的程序,代码结构不很好.

    内部类?

    在一个类中嵌套了另一个类。

    成员内部类

    成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
    要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的

    局部(方法)内部类

    在一个方法体内创建一个类,并在方法体内进行实例化调用。

    匿名内部类

    匿名内部类通常用作于接口的回调。
    注册事件监听,构造handler的时候就已经使用了,没有名字的内部类。

    静态内部类

    类定义时加上static关键字
    只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。
    外部类.内部类 对象名 = new 外部类.内部类();

    Static Inner Class 和 Inner Class 的不同(静态内部类和非静态内部类的区别)

    静态内部类不持有外部类的引用;非静态内部类持有外部类的引用。
    静态内部类可以有静态成员(方法、属性),而非静态内部类则不能有静态成员(方法、属性)。
    静态内部类只能访问外部类的静态成员和静态方法,而非静态内部类则可以访问外部类的所以成员(方法、属性)。
    实例化一个静态内部类不依赖于外部类的实例,直接实例化内部类对象;实例化一个非静态内部类依赖于外部类的实例,通过外部类的实例生成内部类的实例。
    调用静态内部类的方法或静态变量,直接通过类名调

    为什么内部类拥有外部类的所有元素的访问权?

    当某个外围类对象创建一个内部连对象时,内部类对象必定会捕获一个指向那个外围类对象的引用。内部类对象只能在与其外部类对象关联的情况下才能被创建(在内部类非static时),构建内部类需要一个外部类的引用,内部类正是利用这个引用去访问外部类的。

    内部类的作用?

    1.内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
    2.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
    3.创建内部类对象的时刻并不依赖于外围类对象的创建。
    4.内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
    5.内部类提供了更好的封装,除了该外围类,其他类都不能访问

    静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?

    静态内部类:使用static修饰的内部类

    匿名内部类:使用new生成的内部类

    因为内部类的产生依赖于外部类,持有的引用是类名.this。

    相关文章

      网友评论

          本文标题:Java内部类机制

          本文链接:https://www.haomeiwen.com/subject/wobvwttx.html