1、内部类的含义
顾名思义,JAVA内部类指的就是在一个类的内部又定义一个类。内部类可以访问外部类的成员变量和方法。
2、内部类的分类
2.1 成员内部类
2.1.1 概念
(1)定义在类的内部,但不在方法或代码块中。(2)可以访问外部类的所有成员,包括私有成员。(3)创建成员内部类的对象时,必须先创建外部类的对象。
2.1.2 案例
public class OuterClassA {
private final int num = 1;
class InnerClass{
void showNum(){
System.out.println(String.format("外部类的num为%s",num));
}
}
}
2.2 局部内部类
2.2.1 概念
(1)定义在方法或代码块中。(2)只能在定义它的方法或代码块中使用。(3)可以访问外部类的所有成员以及方法中的局部变量
2.2.2 案例
public class OuterClassB {
private final int num = 1;
public void doSomething(){
class InnerClass{
void showNum(){
System.out.println(String.format("外部类的num为%s",num));
}
}
InnerClass innerClass = new InnerClass();
innerClass.showNum();
}
}
2.3 匿名内部类
2.3.1 概念
(1)没有名字,通常用于实现接口或继承类,并且只使用一次。(3)创建匿名内部类时不需要显式地声明类名。
2.3.2 案例
public interface OuterClassC {
void show();
}
2.4 静态内部类
2.4.1 概念
(1)使用 static 关键字修饰,属于外部类的一部分而不是实例的一部分。(2)不依赖于外部类的实例,可以直接通过外部类名访问。(3)不能直接访问外部类的非静态成员,只能访问静态成员。
2.4.2 案例
public class OuterClassD {
private final static int num = 1;
static class InnerClass{
void showNum(){
System.out.println(String.format("外部类的num为%s",num));
}
}
}
2.5 客户端案例:
public class Client {
public static void main(String[] args) {
//成员内部类
OuterClassA outerClass = new OuterClassA();
OuterClassA.InnerClass innerClass = outerClass.new InnerClass();
innerClass.showNum();
//局部内部类
OuterClassB outerClassB = new OuterClassB();
outerClassB.doSomething();
//匿名内部类
OuterClassC outerClassC = new OuterClassC() {
@Override
public void show() {
System.out.println("匿名内部类");
}
};
outerClassC.show();
//静态内部类
OuterClassD.InnerClass innerClass1 = new OuterClassD.InnerClass();
innerClass1.showNum();
}
}