定义在其他类内部的类叫做内部类(嵌套类),包含内部类的类被称为外部类(宿主类)。
接口里也可以定义内部类,但只能用 public static修饰。
内部类比外部类多三个修饰符:private,protected,static。
private修饰的内部类只能被外部类使用。
作用:
提供更好的封装性,把一个类隐藏在外部类以内,不允许其他类访问。
分类:
成员内部类(非静态内部类,静态内部类)局部内部类,匿名内部类。
非静态内部类:
非静态内部类不能有静态成员。
非静态内部类可以直接访问外部类的private成员。
调用非静态内部类的实例方法时(或者访问非静态类成员),必须有一个非静态内部类的实例,且非静态内部实例必须寄生在外部类的实例里。
非静态内部类的构造器必须使用外部类对象来调用。
静态内部类:
使用static修饰的内部类叫做静态内部类(类内部类),
静态内部类属于外部类本身,而不属于外部类的某个对象。
静态内部类可以有静态成员,也可以有非静态成员。
静态内部类只能访问外部类的静态成员。
外部类可以通过静态内部类的类名直接访问静态内部类的静态成员,通过静态内部类的实例访问静态内部类的实例成员。
局部内部类:
如果把一个内部类定义在一个方法里,那么这个类就叫做静态内部类。
局部内部类不能在包含它的方法以外使用。
局部内部类不能使用访问控制符和static修饰符。
局部内部类定义变量,创建实例,派生子类都只能在局部内部类所在的方法里进行。
匿名内部类:
定义:
new 实现接口(){}||new f=父类构造器(参数){}
如果一个类只需要使用一次,那么就可可以创建匿名内部类。
匿名内部类必须继承一个父类,或者实现一个接口。但也只能是一个。
匿名内部类不能作为抽象类或者接口。
匿名内部类不能定义构造器。
匿名内部类拥有相同参数列表的构造器。
接口里也可以定义内部类,但只能用 public static修饰。
内部类比外部类多三个修饰符:private,protected,static。
private修饰的内部类只能被外部类使用。
作用:
提供更好的封装性,把一个类隐藏在外部类以内,不允许其他类访问。
分类:
成员内部类(非静态内部类,静态内部类)局部内部类,匿名内部类。
非静态内部类:
非静态内部类不能有静态成员。
非静态内部类可以直接访问外部类的private成员。
调用非静态内部类的实例方法时(或者访问非静态类成员),必须有一个非静态内部类的实例,且非静态内部实例必须寄生在外部类的实例里。
非静态内部类的构造器必须使用外部类对象来调用。
静态内部类:
使用static修饰的内部类叫做静态内部类(类内部类),
静态内部类属于外部类本身,而不属于外部类的某个对象。
静态内部类可以有静态成员,也可以有非静态成员。
静态内部类只能访问外部类的静态成员。
外部类可以通过静态内部类的类名直接访问静态内部类的静态成员,通过静态内部类的实例访问静态内部类的实例成员。
局部内部类:
如果把一个内部类定义在一个方法里,那么这个类就叫做静态内部类。
局部内部类不能在包含它的方法以外使用。
局部内部类不能使用访问控制符和static修饰符。
局部内部类定义变量,创建实例,派生子类都只能在局部内部类所在的方法里进行。
匿名内部类:
定义:
new 实现接口(){}||new f=父类构造器(参数){}
如果一个类只需要使用一次,那么就可可以创建匿名内部类。
匿名内部类必须继承一个父类,或者实现一个接口。但也只能是一个。
匿名内部类不能作为抽象类或者接口。
匿名内部类不能定义构造器。
匿名内部类拥有相同参数列表的构造器。