JAVA内部类 与 匿名内部类

来源:互联网 发布:淘宝达人账号简介范例 编辑:程序博客网 时间:2024/05/14 23:10
JAVA内部类 与 匿名内部类
1.内部类 分类: 1.1成员内部类 1.2局部内部类 1.3静态内部类 1.4匿名内部类

2. 成员内部类
 public class Outer{
    private static int i = 1;
    private int j = 10;
    private int k = 20;
    public static void outer_f1(){
      //do more something 
    }
    public void out_f2(){
      //do more something
    }


    //成员内部类
    class Inner{ 
     //static int inner_i = 100; //内部类中不允许定义静态变量
      int j = 100; //这个变量和外部类的j变量名字一样,却可以共存
      int inner_i = 1;
      void inner_f1(){
         System.out.println(i); //如果外部类成员变量 与 内部类的成员变量没有同名的,可以直接访问外部类的变量
         System.out.println(j); //在内部类中访问内部类自己的成员变量 可以直接用 变量名访问
System.out.println(this.j); //可以在内部类中用"this.变量名"来访问内部类的成员变量j
         System.out.println(Outer.this.j);//访问外部类中与内部类同变量名的变量
         outer_f1();
         outer_f2(); 
      }


    //外部类的非静态方法访问成员内部类 需要实例化内部类
    public void outer_f3(){   //理解: 非静态方法属于对象所有,调用非静态方法时候可以保证类实例对象已经存在,
      Inner inner = new Inner();  //所以不用 再实例化外部类 对象。
      inner.inner_f1();
    }
    //外部类的静态方法访问成员内部类,与在外部类的外部访问成员内部类一样
    public static void outer_f4{
      Outer out = new Outer();  //建立外部类对象
      Inner inner = out.new Inner(); //根据外部类对象 创建内部类对象
      inner.inner_f1(); //访问内部类的方法
      //理解: 静态方法属于类本身,此时如果要访问内部 非静态类的成员方法, 就要实例化出一个对象 才可访问它
      // 静态方法,静态字段是属于类的!!!!  非静态方法,非静态方法是属于对象的!!!
    }
}
   2.1 成员内部类优点:
       2.1.2  内部类作为外部类的成员, 可以访问外部类的私有成员方法或属性(即使外部类成员权限申明为private,但是对于内部成员类是可见的)
       2.1.3  对于外部类而言,实现了比private还要小的访问权限。(在内部类中 定义private权限,则外部类是无法访问的)
   NOTE: 内部类是一个编译阶段的概念, 一旦编译完成,相当于完全不同的两类。对于一个名为outer的外部类和其内部定义的inner类。编译         完成后outer.class 和 outer$inner.class两类
0 0