内部类
内部类
基本介绍
一种类的内部有完整的嵌套了另一个类的结构,被嵌套的类就是内部类,嵌套其他类的就是外部类。内部类是我们类的第五大成员,(属性,方法,构造器,代码块,内部类),内部类的最大特点就是可以直接访问私有属性,并且可以体现类与类的包含关系
基本语法
class Outer{//外部类
class Inner{//内部类
}
}
class Other{//外部其他类
}
内部类的分类
定义在外部类的局部位置上:
- 局部内部类(有类名)
- 匿名内部类(没有类名)
定义在外部类的成员位置
- 成员内部类(没有static修饰)
- 静态内部类(使用static修饰)
局部内部类
说明:局部内部类是定义在外部类的局部变量中(方法内,代码块中),并且有类名
- 可以直接访问外部类的所有成员,包含私有
- 不能添加修饰符,因为他就是一个局部变量,但可以用final修饰,
- 作用域:仅仅作用于定义它的方法中或者代码块
- 局部内部类访问外部类:直接访问
- 外部类访问局部内部类
创建对象,在访问(必须在作用域内)
局部内部类的本质还是一个类
- 外部其他类不能访问局部内部类,因为局部内部类是局部变量
- 如果外部类和局部内部类的成员重名时,默认遵守就近原则,如果想访问外部类的成员,则可以使用外部类名.this.成员
匿名内部类
说明:
- 作用域:仅仅作用于定义它的方法中或者代码块
- 不能添加修饰符,因为他就是一个局部变量,但可以用final修饰
- 可以直接访问外部类的所有成员,包含私有
- 匿名内部类访问外部类:直接访问
- 如果外部类和匿名内部类的成员重名时,默认遵守就近原则,如果想访问外部类的成员,则可以使用外部类名.this.成员
成员内部类
成员内部类的使用:
-
成员内部类位于外部类的成员部位,可以访问外部类的所有成员,包括私有成员,
-
成员内部类,作为成员,可以使用任意修饰符
静态内部类
成员内部类的使用:
- 成员内部类位于外部类的成员部位,可以访问外部类的所有静态成员,包括私有静态成员,但不能访问其他成员
- 作用域与其他成员一样,为整个类体
- 外部其他类怎么访问静态内部类:
外部类名.静态内部类 实际名称= new 外部类名.静态内部类名.实际名//因为是静态的
//或者:
在外部类中写一个公共的方法来返回静态内部类就可以了
如果外部类和静态成员类重名的话,采用就近原则,如果非要采用外部类成员,那么则采用 外部类.成员(区别在于没有this,因为这里是静态类,所以不用this)
小结
内部类有四种:局部内部类,匿名内部类,成员内部类,静态内部类
- 重点还是掌握匿名内部类的使用
- new 类/接口 (参数列表)
- 成员内部类,静态内部类都放在外部类的成员位置上的