Java内部类

Java中,可以将一个类定义到另一个类或者方法中,这样的类被称为内部类。

四种内部类

一、成员内部类

public class Outter {//外部类

  private Inner inner = null;

  public Outter() {

  }

  public Inner getInnerInstance() {

    if (inner == null)
      inner = new Inner();
    return inner;

  }

  public class Inner {//成员内部类

    public Inner() {

    }

  }
}

成员内部类是最普通的内部类,定义在另一个类的内部,对于外部类而言,内部类可以看作一个成员变量。成员内部类可以无条件访问外部类的所有成员属性和方法,而外部类如果想访问内部类则必须创建一个内部类的对象。内部类是依赖外部类而存在的。

二、局部内部类

class People{
    public People() {
         
    }
}
 
class Man{
    public Man(){
         
    }
     
    public People getWoman(){
        class Woman extends People{   //局部内部类
            int age =0;
        }
        return new Woman();
    }
}

局部内部类是定义在一个方法或者一个作用域里面,访问权限仅限于这个作用域。

三、匿名内部类

mBt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

      }
    });

上面代码是Android中用来为按钮设置监听器。匿名内部类不能有访问修饰符和static修饰的。是为一个没有构造器的类,大多用于借口回调。

四、静态内部类

public class Outter {//外部类

  private Inner inner = null;

  public Outter() {

  }

  public Inner getInnerInstance() {

    if (inner == null)
      inner = new Inner();
    return inner;

  }

  public static class Inner {//静态内部类

    public Inner() {

    }

  }
}

静态内部类是成员内部类前面加了一个static关键字,静态内部类不需要依赖于外部类,和静态变量很像。

使用内部类的好处

  1. 每个内部类都能独立的继承一个接口的实现(无论外部类是否已经继承实现),使多继承解决方案变得完整。
  2. 方便将存在一定逻辑关系的类组织在一起,又可以多外界隐藏。
  3. 方便编写时间驱动程序。
  4. 方便编写线程代码。

你可能感兴趣的:(Java内部类)