java学习日记20230325-内部类

发布时间 2023-03-26 00:23:53作者: 、子夜

内部类

 基本介绍:

  一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类车称为外部类(outer class),是我们类的第五大成员(属性,方法,构造器,代码块,内部类),内部类最大的特点就是可以直接访问私有属性,并且可以提现类与类之间的包含关系。内部类是学习的难点和重点,底层源码又大量的内部类

  基本语法

  

class Outer{//外部类
    
    class Inner{//内部类

    }

}

class Other{//其他类

}

内部类的分类:

  定义在外部类局部位置上(比如方法内):

  1.局部内部类(有类名)

    • 可以直接访问外部类的所有成员,包含私有的;
    • 不能添加访问修饰符,因为他的地位就是一个局部变量,局部变量是不能使用修饰符的,但是 可以使用final修饰了因为局部变量也可以使用final
    • 作用域,仅仅在定义他的方法或代码块中
    • 局部内部类--访问--外部类的成员(直接访问)
    • 外部类--访问--局部内部类的成员 访问方式:创建对象,再访问(必须在作用域内)
    • 局部内部类定义在方法中/代码块
    • 作用域在方法体和代码块中
    • 本质是一个类
    • 外部其他类--不能访问--局部内部类
    • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类.this.成员 相当于调用方法的对象)去访问
    • public class InnerClass01 {
          public static void main(String[] args) {
              Outer outer = new Outer(100);
              outer.m1();
          }
      }
      
      class Outer{
          private  int n1 =100;
      
          public Outer(int n1) {
              this.n1 = n1;
          }
          public void m1(){
              System.out.println("m1");
              //int n1 = 1000;
              class Inner{
                  //private int n1 = 10000;
                  public void fun(){
                      System.out.println(n1 +"fun内部类调用");
                  }
              }
              Inner inner = new Inner();
              inner.fun();
          }
          {
              System.out.println("代码块");
          }
          class Inner{//内部类
      
          }
      }
      View Code

       

  2.匿名内部类(无类名)

  定义在外部类的成员位置上:

  1.成员内部类(没用static修饰)

  2.静态内部类(使用static修饰)