内部类

内部类类型

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();
}

相关推荐