定义:把一个类定义在另一个类的内部,称为内部类。
内部类可以访问外部类的私有数据,因为内部类被当成外部类的成员,同一个类间的成员可以相互访问,但外部类不能访问内部类的实现细节。
内部类不外部类多了三个修饰符:privte、protected、static。
成员内部类是一种与成员变量、方法、构造器和初始化相似的类成员,而局部内部类和匿名内部类则不是类成员。
如果外部类的成员变量、内部类的成员变量和内部类里的局部方法成员变量同名,则可任意通过使用 “this.变量名”、“外部类类名.this.变量名”来区分。
成员内部类分为两种:静态内部类和非静态内部类。
1、非静态内部类:
定义语法格式:
public class Outer{
//此处可以定义内部类
}
非静态内部类可以访问直接外部类的private成员,但是如果外部类需要访问内部类的成员,则必须显示创建非静态内部类对象来调用访问其实例成员。
非静态内部类里不能有静态方法、静态成员变量、静态初始化块。
2、静态内部类:
静态内部类可以包含静态成员,也可以包含非静态成员。
静态内部类是外部类的一个静态成员,因此外部类的所有方法、所有初始化块可以用静态内部类的类名来作为调用者来访问内部类的类成员,也可以使用静态内部类对象作为调用者来访问静态内部类的实例成员。
3、匿名内部类:
匿名内部类就是没有名字的内部类。
匿名内部类不能定义构造器。
匿名内部类不能是抽象类,必须实现接口或者抽象父类的所有抽象方法。
匿名内部类继承一个父类(有且只有一个)或者实现一个接口(有且只有一个),实现父类或者接口中所有的抽象方法,改写父类中的方法,添加自定义方法。
当 匿名内部类和内部类有同名变量(方法)时,默认访问是匿名内部类的变量(方法),访问外部变量(方法)则要加上外部类的类名。
匿名内部类不能定义任何静态成员、方法。
匿名内部类访问外部类的成员变量或成员方法时必须用static修饰。
匿名内部类不能定义任何的静态成员、方法。?????????