内部类
一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类,嵌套其他的类的类称为外部类。
特点
可以直接访问私有属性,并可以体现类与类之间的包含关系
基本语法
class Outer{
class inner{
}
}
class Other{
}
分类
定义在外部类局部位置上(比如方法内)
1.局部内部类(有类名)
1、可以直接访问外部类的所有成员,包含私有的
2、不能添加访问修饰符,因为它的低维是一个局部变量,局部变量是不能使用修饰符的。
但是可以使用final修饰,因为局部变量就是一个static变量
3、作用域:仅仅在定义它的方法或者代码块中。
4、局部内部类---访问--->外部类的成员[直接访问]
5、外部类--->局部内部类的成员
访问方式:创建对象,再访问(注意:必须在作用域内)
6、外部类不能直接访问局部内部类
7、如果外部类和局部内部类重名时,遵循就近原则。如果想访问外部类其他成员,则可以使用
(外部类名.this.成员)去访问
2.匿名内部类(没有类名)
语法:
new 类或者接口(参数列表){
类体
}
1、本质是类、内部类、该类没有名字
2、可以直接访问外部类的所有成员,包含私有的
3、不能添加访问修饰符,因为它的地位就是一个局部变量
4、作用域 仅仅定义在它的方法或代码块中
5、匿名内部类 访问外部类成员 直接访问
6、外部其他类不能访问匿名内部类
7、如果外部类和局部内部类重名时,遵循就近原则。如果想访问外部类其他成员,则可以使用
(外部类名.this.成员)去访问
定义在外部类的成员位置上:
1.成员内部类(没用static修饰)
说明: 成员内部类是定义在外部类的成员位置,并且没有static修饰
1、可以直接访问外部类的所有成员和方法,包含私有的
2、可以添加任意访问修饰符,因为它是成员变量
3、作用域和外部类的其他成员一样,为整个类整体
4、成员内部类访问外部类 直接访问
5、外部类 访问内部类 创建对象 再访问
6、外部其他类 访问 成员内部类
7、如果外部类和成员内部类重名时,遵循就近原则。如果想访问外部类其他成员,则可以使用
(外部类名.this.成员)去访问
2.静态内部类(使用static修饰)
说明: 用static修饰的成员内部类
1、可以直接访问外部类的所有静态成员,包括私有的,但不能直接访问非静态成
2、可以添加任意访问修饰符,因为它是一个成员
3、作用域:同其他的成员,为整个类体
4、成员内部类访问外部类 直接访问
5、外部类 访问内部类 创建对象 再访问
6、外部其他类 访问 成员内部类
7、如果外部类和成员内部类重名时,遵循就近原则。如果想访问外部类其他成员,则可以使用
(外部类名.this.成员)去访问