java 内部类学习笔记

内部类访问特点:

1.内部类可以直接访问外部类中的成员。

2.外部类要访问内部类,必须建立内部类的对象。

一般用于类的设计:

分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容。

这时就是还有的事物定义或内部类来描述。

 

例:

class Outer{

  private int num =3;

  class Inner {

    void show(){

      System.out.println("show run :"+ num);

    }

  }

}

//直接访问外部类中的内部类中的成员。

Outer.Inner in = new Outer().new Inner();

in.show();

//如果内部类是静态的,相当于一个外部类

//如果类是静态,那么类中使用的变量也应该为静态。

Outer.Inner in = new Outer().Inner();

in.show();

 

class Outer{

  private static  int num =3;

  static class  Inner {

    void show(){

      System.out.println("show run :"+ num);

    }

    static void function(){

      System.out.println("show run :"+ num);    }

    }

}

调用:Outer.Inner.function();

//如果内部类中定义了静态成员,该内部类必须也是静态的。

 

 

class Outer{

  int num =3;

  class  Inner {

    int num=4;

    void show(){

      int num=5;

      System.out.println(Outer.this.num);

    }

   }

   void method(){

      new Inner(). show();

  }

//Q:为什么内部类能直接访问外部类中成员呢?

//A:内部类持有外部类的引用。  外部类名.this

 

//内部类可以存放在局部位置上

//从内部类中访问局部变量 X , 需要被声明为最终类型即:final 修饰,X为 常量。

//内部类在局部位置上只能访问 局部中被final修饰的局部变量。

如:

void method(){

   final int x = 9;

  class Inner{

    void show(){system.out.println("show"+ x);};

  }

  new Inner().show();

}

 

//匿名内部类,就是内部类的简写格式。

//前提:内部类必须继承或实现一个外部类或者接口。

//匿名内部类:其实就是一个匿名子类对象。

// 格式 new 类名or 接口 (){子类内容}

 

abstract class Demo {

  abstract void show();

}

Class Outer{

  public void method(){

    new Demo(){

      void show(){

        System.out.println("匿名内部类");

      }.show(); 

    }

  }

}

//应用场景:

//当函数参数是接口类型时,而且接口中的方法不超过三个。可以用匿名内部类作为实际参数进行传递。

 

  

 

 

 

 

 

posted on 2014-04-19 23:14  梵阿林  阅读(122)  评论(0编辑  收藏  举报

导航