java -- 内部类

        第一次写csdn博客,主要是为了复习一下之前学习整理过的东西,毕竟久了动手写一次也有利于记忆和重新审视,说不定能发现原来没有发现到的知识点。今天就简单地讲一下内部类。

什么是内部类

内部类就是定义在另外一个类里面的类,包含内部类的类被称为外部类。

  • 内部类提供了更好的封装,除了外部类以外,不允许同一个包里的其他类直接进行访问
  • 内部类所有实现的功能,使用外部类同样可以实现,只是有时候使用内部类会更加方便

内部类分为以下几种:

  1. 成员内部类
  2. 静态内部类
  3. 方法内部类
  4. 匿名内部类

成员内部类

  • 内部类最常见的就是成员内部类,也称普通内部类,定义在外部类的内部,相当于一个外部类的成员变量的位置。可以使用任何访问访问控制符
  • 内部类中定义的方法可以直接访问外部类数据而不受访问控制符的影响
  • 定义了成员内部类后,必须使用外部类对象创建内部类对象,不能直接new一个内部类对象
  • 外部类不能直接使用内部类的成员和方法,若想要使用需要先创建内部类对象
  • 如果内部类和外部类拥有相同名字的成员变量或者成员方法时,内部类默认访问的是自己的成员变量或方法,可以用this访问,也可以不用this直接写成员变量或方法。当需要使用外部类的成员变量时,需要使用  外部类名字.this.成员变量的名字。例子如下:

       

上述代码编译之后,我们可以在对应的当前包bin文件夹里看到,出现了一下的两个.class文件

一个外部类test,另一个就是内部类Inner。在编译后出现的.class文件,内部类的名字总是:外部类名$内部类名.class

静态内部类

  • 静态内部类就是使用static修饰的内部类,静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问
  • 创建静态内部类对象的时候,不需要外部类的对象,可以直接new一个静态内部类对象
  • 静态内部类使用外部类静态成员或方法时,可以直接使用,也可以通过   类名.成员名字  进行访问
  • 当静态内部类和外部类成员或方法名字相同时,则可以通过类名.成员访问外部类的成员或方法,直接名字则访问内部类的成员或方法

      

方法内部类

  • 方法内部类就是内部类定义在外部类的方法之中,方法内部类只在该方法的内部可见,即只在该方法内可以使用
  • 由于方法内部类只能在方法中使用,因此不能添加public等访问控制符和static修饰符
  • 方法内部类不能直接访问方法内的变量,但是可以直接访问方法内的常量。

       

    内部类对直接调用方法传递进来的final参数(必须是常量)

       

    实际上,在编译后,java 的实际操作如下:

      

     方法内部类在调用方法的final变量或者方法的传参时,实际上是利用自身的构造器对传入的参数进行备份,自己内部方法调用  的实际上是自己的属性,而不是外部方法传递进来的参数。

匿名内部类

匿名内部类由于没有名字,因此必须要集成与父类或者实现一个接口,当然也只能继承一个父类或者一个接口,不能多个同时。匿名内部类没有class关键字,这是因为类直接使用new来生成一个对象的引用

匿名不能是抽象类,因此必须实现父类或者接口中的所有抽象方法

抽象类不能直接实例化,而匿名内部类的作用就是直接对父类或者接口进行实现,并且创建一个实现类的对象。

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值