内部类定义
一个类或者接口定义在另外一个类或者接口的内部。
public class A1{//外部类
class B1{}//内部类
interface C1{}//内部接口
}
1.内部类之外的类称为外部类
2.内部类的名称必须区别于它所在的外部类,和其它类之间没有要求内部类的全名叫做【外部类名称$内部类名称】
3.内部类可以访问其外部类的所有变量和方法,外部类不能直接访问内部类的实现细节
4.内部类比外部类多了private/protected/static三个修饰符,这三个修饰符不能用在外部类上
内部类的作用
1.内部类提供更好的封装
2.内部类可以直接访问外部类的私有成员外部类
3.不能直接访问内部类的成员
4.匿名内部类适合用于创建仅仅使用一次使用的类
内部类分类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
内部类实际拥有外部类的一个引用,在构造函数中将外部类的引用传递进来。
非静态内部类
public class A1{
protected class B1{}
}
静态内部类
public class A1{
protected static class B1{}//静态内部类
}
局部内部类
可以将内部类定义在一个方法活着一个代码块内。
匿名内部类
匿名内部类就是内部类的简写格式,匿名内部类的前提是必须继承或者实现一个外部类或者接口
1.匿名内部类由于没有名字,所以它没有构造函数
2.如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数
3.不能定义静态成员
匿名内部类的使用场景
当方法参数是接口类型时,而且接口中的方法不超过三个,可以用匿名内部类作为实际参数进行传递