1.静态内部类和成员内部类的用法?
2.内部类的修饰符有什么用?
一.关于内部类的分类
内部类广义上可分为四种:成员内部类,局部内部类,静态内部类和匿名内部类
1.1成员内部类
(1)成员内部类可以无条件的访问外部类的属性和方法,无论是私有的还是公开的,静态的还是非静态的。
(2)当成员内部类的属性与外部类同名时访问的是内部类的属性,如果想要访问外部的属性需要使用——外部类.this.成员属性。
(3)外部类想要访问内部类的属性需要先持有一个内部类的实例,通过这个实例来访问。
(4)成员内部类是依附于外部类存在的,也就是说要想创建一个成员内部类需要先创建一个外部类的对象——外部类.内部类 内部类对象 = 外部类对象.new 内部类();
(5)内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。
(6)成员内部类持有了一个外部类的对象的引用
1.2局部内部类
(1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
(2)局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
(3)局部内部类只能访问外部类的final属性
1.3匿名内部类
(1)匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。
(2)匿名内部类只能访问外部类的final属性
(3)只能使用一次,创建实例之后,类定义会立即消失(想要多次使用就要用到反射的知识了)
(4)可以定义代码块,用于实例的初始化,但是不能定义静态代码块。
1.4静态内部类
(1)静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。
(2)静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
网友评论