Java内部类是指定义在类内部或者方法内部的类,主要可以分为四种,
- 成员内部类, 成员内部类是指作为类的成员出现的类;
- 局部内部类, 局部内部类是指定义在方法中的类,只能在对应的方法内部使用
- 静态内部类, 静态内部类是指static修饰的成员内部类
- 匿名内部类, 匿名内部类是可以不进行声明的类
import java.util.concurrent.Executor;
public abstract class Outter {
private int outterNo = -1;
private final static String CLASS_NAME = "Outter";
//成员内部类
class Inner1{
private int innerNo1;
//成员内部类可以直接访问外部的方法
public void print(){
System.out.println(Outter.this.outterNo);
System.out.println(innerNo1);
}
}
private void print1(){
//方位成员内部类需要通过内部类的实例进行访问
Inner1 inner1 = new Inner1();
inner1.print();
}
private void print2(){
//局部内部类声明在方法内部,只能在方法内部使用,
//局部内部类也可以访问外部类的成员
class Inner2{
public int innerNo2;
public void print(){
System.out.println(Outter.this.outterNo);
}
};
Inner2 inner2 = new Inner2();
inner2.print();
}
//静态内部类
public static class Inner3{
//静态内部类可以访问外部类的静态成员
public void print(){
System.out.println(CLASS_NAME);
}
}
private void print3(){
//静态内部类实例化时不需要通过外部类的实例来创建,
//静态内部类不依赖于外部类
Outter.Inner3 inner3 = new Outter.Inner3();
inner3.print();
}
protected abstract void printAbstract();
private void print4(){
//匿名内部类是作为类的实现出现,可以对方法进行实现或重载
new Outter(){
@Override
protected void printAbstract(){
}
};
}
}
1. 成员内部类
成员内部类是作为类的成员出现,
成员内部类可以访问外部类的成员和方法,若外部类成员与内部类成员的成员重名时, 会发生隐藏现象, 默认访问内部类的成员, 可以使用Outter.this.XXX访问外部类成员
外部类不能直接访问内部类的方法, 需要创建一个内部类的实例, 通过实例进行访问。
成员内部类可以用private,protect, public和static关键词进行修饰。
2.局部变量类
局部内部类位于方法内部, 只能在方法内部使用, 调用内部类同样需要创建一个实例
3.静态内部类
静态内部类是有static修饰的成员变量类, 静态变量类只能访问类的静态成员和静态方法, 静态内部类也是不需要依赖外部类的, 可以直接被外部调用。
4.匿名内部类
匿名内部类的使用非常广泛, 主要用于对方法的实现或重载。