内部类的种类
成员内部类
方法内部类
匿名内部类
静态内部类
局部内部类
所谓内部类,是指在一个类的内部还有另外一个类的定义. 在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。
网友评论