java——内部类

1. 为什么需要内部类

(1) 可以访问该类定义所在的作用域中的数据,包括私有数据(内部类具有访问特权,比常规类功能更加强大)

(2) 内部类可以对同一个包中的其他类隐藏起来

(3) 当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷

 

2. 内部类是一个怎样的存在

(1) 是指在一个外部类内部再定义一个类,类名不需要和文件夹相同

(2) 可以使用static,public,default,protected,private等修饰,而外部顶级类只能用public或者default

(3) 编译器会把内部类翻译成$分割外部类名与内部类名,而JVM对此完全不知道。例如外部类编译后是outer.class,对应的内部类则是outer$inner.class

 

3. 成员内部类

public class Outer{
    private static int j=0;
    public class Inner{
        //执行代码  
j ++;
} }

(1) 不能含有static的变量或者方法,因为成员内部类需要先创建外部类

(2) 创建内部类: Outer obj = new Outer();      Outer.Inner   inobj = obj.new Inner();

 

4. 局部内部类

public class Outer{
    
    public void start(){                //定义在函数里
        class Inner1{
            //执行代码
        }
    }

    public void test(){
        if(true){                           //定义在作用域里
            class Inner2{
                //执行代码
            }
        }
    }

}

(1) 局部内部类,是指定义在方法或者作用域中的类,不能使用public或者private访问说明符进行声明。

(2) 局部内部类可以对外部世界完全的隐藏起来。

(3) 不仅可以访问外部类,还可以访问被声明为finla(相当于常量)的局部变量

 

5. 匿名内部类

在局部内部类的基础上再深入一步。假设只创建这个类的一个对象,就不需要命名了。这种类就叫做匿名内部类

public void start(){

    ActionListener listener = new ActionListener(){
         //inner class methods and data
    }

}

 

6. 静态内部类(static)

如果不需要内部类引用外围类对象,仅仅使用内部类来隐藏该类,则可以声明为static,以便取消产生的引用。所有和静态内部类相关的函数也需要定义为static

public class Outer{
    public static class Inner{
        //data or method
    }

    public static Inner getResult(){
        //method
    }
}

(1) 又叫做嵌套内部类,不用创建内部类或者外部类,可直接使用Outer.Inner来使用

(2) 静态内部类一般声明为public,方便调用

 

posted @ 2017-08-29 15:07  东木刀纹  阅读(163)  评论(0编辑  收藏  举报