内部类
内部类类型
public class NestedClassDome01 { //静态内部类 private static class StaticNestedClass{ } //普通内部类 private class FieldInnerClass{ } void test(){ //局部内部类 class LocalClass{ } //局部匿名内部类 Runnable run=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub }}; } }
静态内部类基本用法
可以包含静态和非静态成员
静态内部类可以访问外部类的静态属性和静态方法,不能调用外部类的普通方法和属性
在不相关类中,可以直接创建静态内部类的对象
普通内部类
可以方便使用外部类的所有成员,只为外部类服务
内部类中 this代表内部类的对象,引用外部类对象为Out03.this
Outer03 out=new Outer03( );
Outer03.InnerClass ic=out.new InnerClass( )
成员内部类不能有静态成员变量和方法,除非申明为final并且只能是编译器可以确定值的常量,如果有static InnerClass,内部类对象完全脱离外部类对象,违背了普通内部类的设计初衷
方法内部类
相当于方法中的局部变量,不能用private、protected等修饰
只能定义非静态的成员
不能引用所在方法的普通局部变量,除非是常量。原因如下:方法的生命周期和方法内部类对象的生命周期不一致。方法执行完,内部类对象仍可能存在
匿名内部类
三种方式:继承式,接口式,参数式
public class NestedClassDome03 { Father father=new Father(){ @Override public void test() { } }; } abstract class Father{ public abstract void test(); }