Java内部类的分类

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

  • 局部内部类(有类名)

    • 可以直接访问外部类的所有成员,包含私有.
    • 不能添加访问修饰符,因为局部内部类的地位就是一个局部变量.局部变量是不能使用修饰符的.但是可以使用final修饰,因为局部变量也可以使用final
    • 作用域:仅仅在定义它的方法或代码块中
    • 外部其他类-不能访问→局部内部类(局部内部类的地位是一个局部变量)
    • 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果访问外部类的成员可以使用(外部类名.this.成员)来进行访问.
      • System.out.println("外部类的n2="+外部类名.this.n2);
    • 当局部内部类—访问—>外部类的成员[访问方式:直接访问]
    • 当外部类—访问—局部内部类的成员[访问方式:创建对象,在访问(注意:必须在作用域中]
      • 记住:
      • 局部内部类定义在方法中/代码块
      • 作用域在方法体或代码块中
      • 本质任然是一个类
  • 匿名内部类(没有类名)

    • 匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。
    • 匿名类中允许使用非静态代码块进行成员初始化操作
    • 匿名类的非静态代码块会在父类的构造方法之后被执行

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

  • 成员内部类(没有static修饰)
    • 成员内部类是定义在外部类的成员位置上,并且没有static修饰
      • 可以直接访问外部类的所有成员,包含私有
      • 可以添加任何的访问修饰符(public,protected,默认,private)(因为地位就是一个成员)
      • 作用域和其它成员一样,为整个类体
      • 成员内部类—访问—>外部类(比如:属性)[访问方式:直接访问]
      • 外部类—访问—>内部类(说明)[访问方式:创建对象,在访问]
      • 外部其它类—访问—>成员内部类
      • 如果外部类和内部类的成员重名时,默认遵循就近原则,如果访问外部类的成员可以使用(外部类名.this.成员)来进行访问.
        • System.out.println("外部类的n2="+外部类名.this.n2);
  • 静态内部类(使用static修饰)
    • 静态内部类是定义在外部类的成员位置,并且有static修饰
      • 可以直接访问外部类的所有成员,包含私有,但是不能直接访问非静态成员
      • 可以添加任何的访问修饰符(public,protected,默认,private)(因为地位就是一个成员)
      • 作用域和其它成员一样,为整个类体
      • 静态内部类—访问—>外部类(比如:静态属性)[访问方式:直接访问所有的静态成员]
      • 外部类—访问—>静态内部类 访问方式:创建对象在访问

注:只有成员内部类才能加static变成静态内部类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值