Java基础06 内部类

内部类

在一个类的内部再定义一个类,如下:Inner是Outer的内部类。内部类可以访问外部类的所有成员变量和方法,利用这个特性我们可以实现多继承。

  public class Outer {
      public class Inner {
   
       }
  }

一、成员内部类:

跟类的成员变量和方法同级的内部类;成员内部的权限修饰词跟类的成员变量及方法的权限修饰词的作用是一致的,成员内部类 一个特殊的成员变量,可以理解为一个class类型的成员变量

二、静态内部类:

静态内部类跟成员变量类似,有静态与非静态之分;静态内部类只能访问外部类的静态数据,非静态内部类不能在类中定义静态数据;非静态内部类不能在类中定义静态变量,静态方法。

  //静态内部类:只能访问外部的静态成员变量,
public static class StaticInner{
    public void input(){
        System.out.println(staticNumber);
    }
}
public void foo(){
    System.out.println("out foo");
}
public void out(){
    System.out.println("---out");
    foo();
}

三、局部内部类:

不能用权限修饰符;定义在类的方法体内。作用:多个类协同完成某些功能,并将这些类的细节隐藏起来

四、匿名内部类:

与匿名对象类似,没有名字的类就是匿名内部类,匿名内部类相当于对类的拓展。

内部类的使用:

   //成员内部类的使用
    Outer outer1 = new Outer();
    Outer.Inner inner = outer1.new Inner();
    inner.input("hehe");

    //静态内部类的使用
    Outer.StaticInner inner1 = new Outer.StaticInner();
    inner1.input();
    System.out.println(outer.getClass());
   
   //匿名内部类
    Outer object = new Outer(){
        public void foo(){
            System.out.println("foo");
        }
    };
    object.output();
    System.out.println(object.getClass());

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