内部类

定义:将一个类定义在另一个类的里面,对里面的类就称为内部类。

访问特点:内部类可以直接访问外部类中的成员,包括私有成员。

     而外部类要访问内部类中的成员必须要建立内部类的对象。

一般用于类的设计。

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

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

 

内部类的修饰符:

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

  Outer.Inner in = new Outer ().new Inner();(内部类很多被封装这种情况很少见)

 如果内部类是静态的。就相当于一个外部类。

  Outer.Inner in = new Outer. Inner();(这时不在需要创建内部类对象)

如果内部类是静态的,成员是静态的。(此时不需要在创建对象了)

  Outer.Inner.function();(注意在编译时内部类是成员如果是静态修饰的,内部类也需要用static修饰)  

  

为什么内部类能直接访问外部类中的成员?

  因为内部类持有了外部类的引用。  外部类名.this

 

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

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

匿名内部类:其实就是一个匿名子类对象。(做了一个简化封装动作)

格式:new 父类or接口(){子类内容}

abstract class Demo

{

  abstract void show();

}

class Outer

{

  int num = 4;

  public void method ()

  {

    new Demo()  //直接新建了一个demo子类对象 如果内部类有多个方法可以创建对象          //Demo demo=new Demo(); 用demo对象调用对应的内部类方法

    {

      void show()

      {

        System.out.printlnn("show................"+num);  

      }

    }.show();  //对对象的方法进行调用

  }

}

class InnerClassDemo

{

  public static void main ( String [] args )

  {

    new Outer().method();

  }

}

通常使用场景之一:

当函数参数是接口类型时,而且接口中的方法不超过三个,可以使用匿名内部类作为实际参数进行传递。(超过三个方法的话这个匿名内部类对象太庞大阅读性变差)

注意main方法是静态方法只能调用静态方法,不能直接访问非静态的内部类。

 

posted @ 2017-12-05 22:55  beulas  阅读(122)  评论(0编辑  收藏  举报