Java-内部类

什么是内部类?
 在Java中,在一个类中定义另一个类:
      举例
              在类A中,定义一个类B,将类B称为类A的内部类,类A是类B的外部类!

  分类:
        成员内部类:在类中,方法外定义的类
        局部内部类:在方法定义中定义的类

局部内部类

局部内部类:
      在外部类的成员方法中定义的类
      特点:
              局部内部类也是可以直接访问外部类的成员变量,包括私有!

     面试题:
     局部内部类里面的成员在访问局部变量的时候,局部变量有什么要求?

          JDK8以前的版本,局部内部类在访问外部类的成员方法中的局部变量的时候,此时局部变量必须加入final修饰!
          原因:
                  局部变量的生命周期随着方法调用而存在,随着方法调用结束而消失;
                  外部类的成员方法调用完毕,此时这个局部变量应该释放了,但是当前这个成员方法中创建局部内部类对象
                  使用局部内部类对象访问它里面的成员方法,成员方法还在使用这个局部变量,所以此时这个变量为常量,显示的加入
                  final修饰
         JDK8以及jdk8以后:优化了
                   可以通过反编译工具---->自动加入final,还是定义一个常量

成员内部类

成员内部类:
      在外部类中,在外部类的成员方法外

     特点:
      可以访问外部类的成员包括私有!


 直接去访问外部类的中的成员内部类的成员方法:特有方式 (成员内部类没有private以及static修饰!)
      外部类.内部类名 对象名 = new 外部类名().new 内部类名() ;
成员内部类所涉及到的修饰符的问题:
      有的时候不想让外部类直接去访问内部类的成员,为了保证内部类的成员安全,加入private
    举例:
          人有身体,身体有心脏;
       伪代码
          class Body{
                  //身体内有心脏
                  //为了保证安全性,加入private修饰
                 private class Heart{
                   //成员方法
                    public void operator(){
                            System.out.println("心脏搭桥") ;
                    }
                 }

                 //外部类的成员方法
                 public void method(){
                     if(你是外科医生){
                         //创建Heart对象,去调用operator方法
                     }
                 }


          }


     //直接访问成员内部类中的operator方法
     外部类名.内部类名 对象名 = new 外部类名().new 内部类名() ;
     Body.Heart bh = new Body().new Heart() ;会报错的


    成员内部类可以使用过static修饰:
    特点:静态的成员内部类它里面的所有 成员方法:
          无论是静态的方法还是非静态的,访问外部类的成员:必须先为静态

     想直接去访问静态的成员内部类的这些成员方法:??

     外部类名.内部类名 对象名 = new 外部类名.内部类名();

内部类外部类没有继承关系,不能使用super!

匿名内部类

匿名内部类:(没有名字的类)---是内部类的一种简化格式!
      针对抽象类或者接口去使用的
      匿名的格式
          new 类名(抽象类)或者接口名(){
              重写类里面或者接口的抽象功能!
          } ;
      应用范围:在局部位置中使用

      匿名内部类的本质:
              是继承了该抽象类或者是实现了接口子类对象!
              
      匿名内部类常在开发中使用
匿名内部类开发中使用场景2:
  方法返回值是抽象类或者接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周不要掉头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值