把类定义在另一个类的内部,该类就被称为内部类。而这个类的外部的类则被称为外部类(或称为宿主类)。
class Outer{
? ? ?private int age = 20;
? ? ?class Inner{
? ? ? ? ? public void show(){
? ? ? ? ? ? ? ?System.out.print(age);
? ? ? ? ? }
? ? ?}
}
特点:可以使用外部类中所有的成员变量和成员方法(包括private的)
1.内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号;
2.内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否为private的。
一种特殊的局部内部类,它是通过匿名类实现的接口。
new 接口名称/抽象类名称(){
? ? ?//重写抽象方法
}
在实际开发中,一个接口/抽象类的方法的某个实现方法在程序中只会执行一次,但为了使用它,我们需要创建它的实现类 。此时,可以使用匿名内部类的方式,可以无需创建新的类,减少代码冗余。
例如:
public interface A{
? ? ?abstract void fun1();
}
new A(){
? ? ?public void fun1{
? ? ? ? ? System.out.println("匿名类实现!");
? ? ?}
}
补充:像之前学习的迭代器是ArrayList的一个内部类,EntrySet也是一个内部类。
1.封装性:将只有在某个类中使用的功能定义在内部类中,并可以使用不同的访问权限修饰控制;
2.实在多继承操作。