什么是内部类
在一个类的内部定义的类被称为内部类。
内部类的使用场景
内部类和外部类有一定的关系,如果一个类只被某个类使用的时候,可以将该类定义为使用者的内部类,无需为该类单独创建一个类文件。
内部类的分类
内部类可以分为成员内部类,静态内部类,局部内部类和匿名内部类。
内部类demo
public class OuterClass {
/**
* 常量
*/
private static final String TYPE = "outer";
/**
* 静态属性
*/
private static int count;
/**
* 成员属性
*/
private String name;
//不能将成员内部类定义为外部类的静态属性
// private static MemberInnerClass memberInnerClass = new MemberInnerClass();
private MemberInnerClass memberInnerClass = new MemberInnerClass();
private static StaticInnerClass staticInnerClass = new StaticInnerClass();
private StaticInnerClass staticInnerClass2 = new StaticInnerClass();
/**
* 匿名内部类
*/
private static InnerInterface staticAnonymousInner = new InnerInterface() {
@Override
public void compare() {
//静态属性的匿名内部类不能直接访问外部类的成员属性
// System.out.println(name);
}
private static final String ANONYMOUS_INNER_TYPE = "anonymousType";
//匿名内部类不能定义静态变量
//private static int anonymousCount;
private String anonymousName;
//匿名内部类不能定义静态方法
// public static void anonymousInnerStaticMethod() {
// System.out.println("anonymous inner class static method");
// }
public void anonymousInnerMemberMethod() {
System.out.println("anonymous inner class member method");
System.out.println(TYPE);
System.out.println(count);
//静态属性的匿名内部类不能直接访问外部类的成员属性
// System.out.println(name);
staticMethod();
//静态属性的匿名内部类不能直接访问外部类的成员方法
// memberMethod();
}
};
/**
* 匿名内部类
*/
private InnerInterface memberAnonymousInner = new InnerInterface() {
@Override
public void compare() {
//非静态属性的匿名内部类可以直接访问外部类的成员属性
System.out.println(name);
}
private static final String ANONYMOUS_INNER_TYPE = "anonymousType";
//匿名内部类不能定义静态变量
//private static int anonymousCount;
private String anonymousName;
//匿名内部类不能定义静态方法
// public static void anonymousInnerStaticMethod() {
// System.out.println("anonymous inner class static method");
// }
public void anonymousInnerMemberMethod() {
System.out.println("anonymous inner class member method"